2015-08-31 31 views
1

在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)) 

,但没有奏效。

所以我想知道如何最好地计数模板中的用户的帖子数量?

+0

为什么不通过访问''{{post.creator.post_set.count}}'直接在模板上试试? – Mounir

+0

@Mounir不知道这个sintax。但它像一个魅力。谢谢。 – Jand

回答

1

你试过吗? :

posts = Post.objects.filter(topic=topic_id).order_by('created').annotate(creator_post_count=Count('creator__post_set_id', distinct=True)) 

或直接在模板中打印{{ topic.creator.post_set.count }}

+0

Indead'{{topic.creator.post_set.count}}'工作!谢谢! – Jand