Give each comment form a unique prefix.
authorMatthijs Kooijman <matthijs@stdin.nl>
Fri, 31 Oct 2008 16:42:31 +0000 (17:42 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Fri, 31 Oct 2008 16:42:31 +0000 (17:42 +0100)
influences/models.py
influences/views.py

index 7ddd9d53e44300ef16d8dc054fa6626e9086f075..fcd1f51aa86f9e835dd230ad95d01c6eb682e7e4 100644 (file)
@@ -45,6 +45,13 @@ class Influence(models.Model):
         return self.summary
 
     def get_comments(self, private):
+        """
+        Gets the comments that have been made on this Influence. Each
+        comment gets its reply_form attribute set to a Form appropriate
+        for replying to the comment.
+        
+        If private is True, private comments are included in this list.
+        """
         def quote_reply(comment):
             return "\n".join(["> " + l for l in comment.comment.split("\n")])
 
@@ -60,8 +67,10 @@ class Influence(models.Model):
         # Annotate each comment with a proper reply form
         for comment in comments:
             initial = { 'comment' : quote_reply(comment) }
-            comment.reply_form = get_influence_comment_form(private, comment)(initial=initial)
-
+            prefix = "reply-to-%s" % (comment.pk)
+            FormClass = get_influence_comment_form(private, comment)
+            comment.reply_form = FormClass(initial=initial,
+                                           prefix=prefix)
         return comments
 
     class Meta:
index e1ec516a5ca30f024aae289ac8dd4c92dd54356e..a8b9a7df631612d5491498d616c5344b48f1cdb7 100644 (file)
@@ -109,7 +109,8 @@ def influence_detail(request, object_id):
     return render_to_response('influences/influence_detail.html', context, RequestContext(request))
 
 @login_required
-def influence_comment(request, edit_id=None, *args, **kwargs):
+def influence_comment(request, object_id, edit_id=None):
+    kwargs = {}
     # Add the content_type, since we don't put in in the url explicitly
     kwargs['content_type'] = ContentType.objects.get_for_model(Influence).id
     # Find the comment to which we're replying, so we can get the right form for it.
@@ -117,12 +118,16 @@ def influence_comment(request, edit_id=None, *args, **kwargs):
         reply_to = get_object_or_404(ThreadedComment, id=edit_id)
     else:
         reply_to = None
+
     # Find the right form class
     kwargs['form_class']   = get_influence_comment_form(request.user.is_staff, reply_to)
     # Override the model, so we don't get a free comment, but a normal
     # one. We can't use threadedcomments' comment view for that, since
     # that hardcodes the form_class.
     kwargs['model'] = ThreadedComment
-    return free_comment(request, edit_id=edit_id, *args, **kwargs)
+    # Set a custom preview view
+    if parent_id:
+        kwargs['prefix'] = "reply-to-%s" % (parent_id)
+    return free_comment(request, object_id=object_id, edit_id=edit_id, **kwargs)
 
 # vim: set sts=4 sw=4 expandtab: