Guest User

Untitled

a guest
Jul 6th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. class PostDetailView(AjaxResponseMixin, UpdateView):
  2. model = UserPost
  3. context_object_name = 'post'
  4. template_name = 'feed/post_detail.html'
  5. form_class = CommentForm
  6.  
  7. def get_initial(self):
  8. initial_data = super(PostDetailView, self).get_initial()
  9. obj = self.get_object()
  10. initial_data.update({
  11. "content_type": obj.get_content_type,
  12. "object_id": obj.id
  13. })
  14. return initial_data
  15.  
  16. def get_context_data(self, **kwargs):
  17. # comment_form = CommentForm
  18. context = super(PostDetailView, self).get_context_data(**kwargs)
  19. kwargs['form_comment'] = context['form'] # comment_form
  20. try:
  21. total_views = r.incr('userpost:{}:views'.format(self.object.pk))
  22. kwargs['total_views'] = total_views
  23. except (redis.exceptions.ConnectionError,
  24. redis.exceptions.BusyLoadingError):
  25. pass
  26.  
  27. return super(PostDetailView, self).get_context_data(**kwargs)
  28.  
  29. def get_success_url(self):
  30. try:
  31. total_views = r.incr('userpost:{}:views'.format(self.object.pk))
  32. except (redis.exceptions.ConnectionError,
  33. redis.exceptions.BusyLoadingError):
  34. pass
  35. return reverse_lazy('feed:post_detail', kwargs={'pk': self.object.pk})
  36.  
  37. def form_valid(self, form):
  38. c_type = form.cleaned_data.get("content_type")
  39. obj_id = form.cleaned_data.get('object_id')
  40. content_data = form.cleaned_data.get("content")
  41. parent_obj = None
  42. try:
  43. parent_id = int(self.request.POST.get("parent_id"))
  44. except:
  45. parent_id = None
  46.  
  47. if parent_id:
  48. parent_qs = Comment.objects.filter(pk=parent_id)
  49. if parent_qs.exists() and parent_qs.count() == 1:
  50. parent_obj = parent_qs.first()
  51.  
  52. new_comment, created = Comment.objects.get_or_create(
  53. user=self.request.user,
  54. content_type=c_type,
  55. object_id=obj_id,
  56. content=content_data,
  57. parent=parent_obj,
  58. )
  59. if created:
  60. ct = ContentType.objects.get_for_id(c_type.id)
  61. obj = ct.get_object_for_this_type(pk=obj_id)
  62. create_action(self.request.user, 'commented on', obj)
  63. return super(PostDetailView, self).form_valid(form)
  64.  
  65. def form_invalid(self, form):
  66. print("invalid form")
  67.  
  68. class PostDetailViewTests(TestCase):
  69. @classmethod
  70. def setUpTestData(cls):
  71. user = User.objects.create_user(username='chitra', password='password123')
  72. cls.post = UserPost(author=user, post_body="Test post", )
  73. cls.post.save()
  74.  
  75.  
  76. def setUp(self):
  77. login = self.client.login(username='chitra', password='password123')
  78. user = auth.get_user(self.client)
  79. assert user.is_authenticated
  80.  
  81. def test_postdetail_view_page_status_code(self):
  82. """
  83. Test that a PostDetailView page is rendering correctly
  84. """
  85. response = self.client.get(reverse_lazy('feed:post_detail', kwargs={'pk': self.post.pk}))
  86. self.assertEquals(response.status_code, 200, 'post doesnt exist with pk={}'.format(self.post.pk))
  87. self.assertTemplateUsed(response, 'feed/post_detail.html', 'Template used is wrong')
  88.  
  89. def test_postdetail_view_post_comment(self):
  90. """
  91. Test that a comment is posted ot post correctly
  92. """
  93. user = User.objects.get(pk=1)
  94. resp = self.client.post(reverse_lazy('feed:post_detail', kwargs={'pk': self.post.pk}), {'content': 'just a comment'})
  95. self.assertEqual(resp.status_code, 200)
  96. # co.refresh_from_db()
  97. self.assertTrue(Comment.objects.filter().exists())
  98.  
  99. class CommentForm(ModelForm):
  100.  
  101. class Meta:
  102. model = Comment
  103. fields = ['content_type', 'object_id', 'content'] # list of fields you want from model
  104. widgets = {'content_type': HiddenInput(), 'object_id': HiddenInput(),
  105. 'content': Textarea(attrs={'rows': 4, 'cols': 65}),
  106. }
  107.  
  108. class Comment(models.Model):
  109. user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
  110. content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
  111. object_id = models.PositiveIntegerField()
  112. content_object = GenericForeignKey('content_type', 'object_id')
  113. parent = models.ForeignKey("self", null=True, blank=True, on_delete=models.CASCADE)
  114. content = models.TextField()
  115. timestamp = models.DateTimeField(auto_now_add=True)
  116. objects = CommentManager()
Add Comment
Please, Sign In to add comment