Let Influence list and annote its comments itself.
authorMatthijs Kooijman <matthijs@stdin.nl>
Fri, 31 Oct 2008 11:45:38 +0000 (12:45 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Fri, 31 Oct 2008 11:45:38 +0000 (12:45 +0100)
Previously, both the admin view and the influence_detail view would
create this list and annotate it with reply forms.

influences/admin.py
influences/models.py
influences/views.py

index f3e882801f67314c8420580179a4df52921337c4..3c380ec27f73822bfb749f8b6855e443065a5bd2 100644 (file)
@@ -7,8 +7,6 @@ from django.contrib.contenttypes import generic
 from threadedcomments.models import ThreadedComment
 from django.utils.safestring import mark_safe
 
-from views import get_influence_comment_form, quote_reply
-
 class CharacterAdmin(admin.ModelAdmin):
     list_filter=('status', 'player')
     search_fields=('name',)
@@ -35,11 +33,7 @@ class InfluenceAdmin(admin.ModelAdmin):
         opts = model._meta
         obj = get_object_or_404(model, pk=object_id)
 
-        comments = ThreadedComment.objects.get_tree(obj)
-        # Annotate each comment with a proper reply form
-        for comment in comments:
-            initial = { 'comment' : quote_reply(comment) }
-            comment.reply_form = get_influence_comment_form(request.user.is_staff, comment)(initial=initial)
+        comments = obj.get_comments(private=True)
 
         context = {
             'root_path'     : self.admin_site.root_path,
index 1079b0a62b3518cf22992e8317c31a6204b15360..7ddd9d53e44300ef16d8dc054fa6626e9086f075 100644 (file)
@@ -1,6 +1,7 @@
 from django.db import models
 from django.contrib.auth.models import User
 from django.utils.translation import ugettext_lazy as _
+from threadedcomments.models import ThreadedComment
 
 # Create your models here.
 class Character(models.Model):
@@ -43,6 +44,26 @@ class Influence(models.Model):
     def __str__(self):
         return self.summary
 
+    def get_comments(self, private):
+        def quote_reply(comment):
+            return "\n".join(["> " + l for l in comment.comment.split("\n")])
+
+        # Import here to prevent dependency loop, since forms depends on
+        # models as well
+        from forms import get_influence_comment_form
+
+        if private:
+            comments = ThreadedComment.objects.get_tree(self)
+        else:
+            comments = ThreadedComment.public.get_tree(self)
+
+        # 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)
+
+        return comments
+
     class Meta:
         verbose_name = _("Influence")
         verbose_name_plural = _("Influences")
index b49b1003bbef82624c72663f67996c42fcfc3b07..e1ec516a5ca30f024aae289ac8dd4c92dd54356e 100644 (file)
@@ -89,9 +89,6 @@ def influence_list(request):
     os = Influence.objects.filter(character__player=request.user)
     return render_to_response('influences/influence_list.html', {'object_list' : os}, RequestContext(request))
 
-def quote_reply(comment):
-    return "\n".join(["> " + l for l in comment.comment.split("\n")])
-
 @login_required
 def influence_detail(request, object_id):
 
@@ -102,15 +99,7 @@ def influence_detail(request, object_id):
 
     # Show all comments to staff, but only public comments to other
     # users
-    if request.user.is_staff:
-        comments = ThreadedComment.objects.get_tree(o)
-    else:
-        comments = ThreadedComment.public.get_tree(o)
-
-    # Annotate each comment with a proper reply form
-    for comment in comments:
-        initial = { 'comment' : quote_reply(comment) }
-        comment.reply_form = get_influence_comment_form(request.user.is_staff, comment)(initial=initial)
+    comments = o.get_comments(private=request.user.is_staff)
     
     context  = {
         'object' : o,