views.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from django.utils import timezone
  2. from django.shortcuts import render, redirect
  3. from django.contrib import messages
  4. from django.views.generic import View
  5. from review.models import Review, Reply
  6. from review.forms import ReplyForm
  7. from gauth.models import Location
  8. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  9. class ReviewListByLocationView(View):
  10. def get(self, request, location_id, *args, **kwargs):
  11. reviews = Review.objects.filter(location_id=location_id).order_by('-update_time')
  12. locations = Location.objects.all()
  13. page = request.GET.get('page', 1)
  14. paginator = Paginator(reviews, 50)
  15. try:
  16. reviews = paginator.page(page)
  17. except PageNotAnInteger:
  18. reviews = paginator.page(1)
  19. except EmptyPage:
  20. reviews = paginator.page(paginator.num_pages)
  21. context = {'reviews': reviews, 'locations': locations}
  22. return render(request, 'review_list.html', context)
  23. class ReviewListView(View):
  24. def get(self, request, *args, **kwargs):
  25. reviews = Review.objects.all().order_by('-update_time')
  26. locations = Location.objects.all()
  27. page = request.GET.get('page', 1)
  28. paginator = Paginator(reviews, 50)
  29. try:
  30. reviews = paginator.page(page)
  31. except PageNotAnInteger:
  32. reviews = paginator.page(1)
  33. except EmptyPage:
  34. reviews = paginator.page(paginator.num_pages)
  35. context = {'reviews': reviews, 'locations': locations}
  36. return render(request, 'review_list.html', context)
  37. class UnRepliedReviewList(View):
  38. def post(self, request, *args, **kwargs):
  39. form = ReplyForm(self.request.POST)
  40. if form.is_valid():
  41. reply = form.cleaned_data.get('reply')
  42. review_id = self.request.POST['review_id']
  43. review = Review.objects.filter(pk=review_id).first()
  44. now = timezone.now()
  45. if review:
  46. review_reply = Reply(replied_text=reply, create_time=now)
  47. review_reply.save()
  48. review.reply = review_reply
  49. review.save()
  50. messages.success(request, f'Your reply has been posted!')
  51. return redirect('un-replied-review')
  52. def get(self, request, *args, **kwargs):
  53. now = timezone.now()
  54. form = ReplyForm()
  55. date = now - timezone.timedelta(days=30)
  56. reviews = Review.objects.filter(reply=None, update_time__gte=date).order_by('-update_time')
  57. return render(request, 'dashboard.html', {'reviews': reviews, 'form': form})