From 06863704f30a2025ee82fd89a41716f5ab2cce87 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Fri, 31 Oct 2008 12:45:38 +0100 Subject: [PATCH] Let Influence list and annote its comments itself. Previously, both the admin view and the influence_detail view would create this list and annotate it with reply forms. --- influences/admin.py | 8 +------- influences/models.py | 21 +++++++++++++++++++++ influences/views.py | 13 +------------ 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/influences/admin.py b/influences/admin.py index f3e8828..3c380ec 100644 --- a/influences/admin.py +++ b/influences/admin.py @@ -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, diff --git a/influences/models.py b/influences/models.py index 1079b0a..7ddd9d5 100644 --- a/influences/models.py +++ b/influences/models.py @@ -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") diff --git a/influences/views.py b/influences/views.py index b49b100..e1ec516 100644 --- a/influences/views.py +++ b/influences/views.py @@ -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, -- 2.30.2