def post_comment(request, next=None, using=None): """ Post a comment. HTTP POST is required. If ``POST['submit'] == "preview"`` or if there are errors a preview template, ``comments/preview.html``, will be rendered. """ # Fill out some initial data fields from an authenticated user, if present data = request.POST.copy() if request.user.is_authenticated(): if not data.get('name', ''): data["name"] = request.user.get_full_name() or request.user.username if not data.get('email', ''): data["email"] = request.user.email # Check to see if the POST data overrides the view's next argument. next = data.get("next", next) # Look up the object we're trying to comment about ctype = data.get("content_type") object_pk = data.get("object_pk") model = apps.get_model(*ctype.split(".", 1)) target = model._default_manager.using(using).get(pk=object_pk) # Construct the comment form form = CommentForm(target, data=data) # Check security information if form.security_errors(): return None # Create the comment comment = form.get_comment_object() comment.ip_address = request.META.get("REMOTE_ADDR", None) if request.user.is_authenticated(): comment.user = request.user # Signal that the comment is about to be saved responses = signals.comment_will_be_posted.send( sender = comment.__class__, comment = comment, request = request ) # Save the comment and signal that it was saved comment.save() message = get_object_or_404(Message, pk = object_pk) message.envoyer_commentaire_notification(comment.pk, request.user.username) signals.comment_was_posted.send( sender = comment.__class__, comment = comment, request = request ) comment_list = [comment] return render(request, 'comments/list.html', {'comment_list': comment_list})
def testGetCommentObject(self): f = self.testValidPost() c = f.get_comment_object() self.assertTrue(isinstance(c, Comment)) self.assertEqual(c.content_object, Article.objects.get(pk=1)) self.assertEqual(c.comment, "This is my comment") c.save() self.assertEqual(Comment.objects.count(), 1) # Create a comment for the second site. We only test for site_id, not # what has already been tested above. a = Article.objects.get(pk=1) d = self.getValidData(a) d["comment"] = "testGetCommentObject with a site" f = CommentForm(Article.objects.get(pk=1), data=d) c = f.get_comment_object(site_id=self.site_2.id) self.assertEqual(c.site_id, self.site_2.id)