在Django的一个简单的论坛应用程序中,我想在每个线程上呈现几个用户在同一页面上发布的帖子(就像你在VB和其他经典论坛上看到的一样)。如何计算Django中几个用户的相关对象?
下面是型号:
class Post(models.Model):
title = models.CharField(max_length=75, null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
creator = models.ForeignKey(User, blank=True, null=True)
updated = models.DateTimeField(auto_now=True)
topic = models.ForeignKey(Topic)
body = models.TextField(max_length=10000)
class Topic(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(max_length=10000, null=True)
forum = models.ForeignKey(Forum)
created = models.DateTimeField()
creator = models.ForeignKey(User, blank=True, null=True)
updated = models.DateTimeField(auto_now=True)
closed = models.BooleanField(blank=True, default=False)
published = models.BooleanField(blank=True, default=False)
visits = models.IntegerField(default = 0)
weight = models.IntegerField(blank=True, default=0)
slug = models.CharField(max_length=100, blank=True)
def num_posts(self):
return self.post_set.count()
def num_replies(self):
return max(0, self.post_set.count() - 1)
def last_post(self):
if self.post_set.count():
return self.post_set.order_by("-created")[0]
def __unicode__(self):
return unicode(self.creator) + " - " + self.title
def save(self, *args, **kwargs):
super(Topic, self).save(*args, **kwargs)
我也有这种奇怪的模式:
class PostCount(models.Model):
user = models.OneToOneField(User)
posts = models.IntegerField(default=0)
@classmethod
def create(cls, user):
postcount = cls(user=user)
return postcount
不知何故神奇地由用户(而不是职位数)返回主题的号码,这样他们可以可以使用{{topic.creator.postcount.posts}}
在模板中进行访问。
和使议题的观点:
def topic(request, topic_id):
"""Listing of posts in a topic."""
posts = Post.objects.filter(topic=topic_id).order_by("created")
posts = mk_paginator(request, posts, DJANGO_SIMPLE_FORUM_REPLIES_PER_PAGE)
topic = Topic.objects.get(pk=topic_id)
topic.visits += 1
topic.save()
forum = topic.forum
return render_to_response("myforum/topic.html", add_csrf(request, posts=posts, pk=topic_id,
topic=topic, forum= forum), context_instance=RequestContext(request))
我已经试过这
posts = Post.objects.filter(topic=topic_id).order_by("created").annotate(creator_post_count=Count(creator__post_set))
,但没有奏效。
所以我想知道如何最好地计数模板中的用户的帖子数量?
为什么不通过访问''{{post.creator.post_set.count}}'直接在模板上试试? – Mounir
@Mounir不知道这个sintax。但它像一个魅力。谢谢。 – Jand