django如何计算许多人的领域

时间:2014-11-26 13:03:36

标签: python django django-queryset

我有问题的模型:

class Question(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=120)
    description = models.TextField()
    answers = models.ManyToManyField('Answer',related_name='answer_name', blank=True)
    post_date = models.DateTimeField(auto_now=True)

def __unicode__(self):
    return self.title

我有回答的模型:

class Answer(models.Model):
    user = models.ForeignKey(User)
    question = models.ForeignKey(Question)
    ans_body = models.TextField()
    post_date = models.DateTimeField(auto_now=True)

def __unicode__(self):
    return self.ans_body

问题创建和答案提交工作完美。我无法正确显示特定问题的答案。但是,当我试图得到特定问题的答案时,它没有显示出来。它显示0计数。

在我看来,我得到了答案清单:

context["question_list"] = Question.objects.all()

在我的模板中

{% for question in question_list %}
   {{ question.title }}
    Ans:{{question.answers.count}}
{% endfor %}

当我这样做时,如果有答案我得到计数​​0。如何计算特定问题的答案数。

3 个答案:

答案 0 :(得分:9)

这有效:

{{question.answer_set.count}}

快乐..

答案 1 :(得分:6)

您可以执行{{ question.answers.all.count }}之类的操作,但如果您不仅仅是问题,那么它将导致每个问题的数据库查询。

如果要使用每个问题的计数来注释整个查询集:

from django.db.models import Count

context['question_list'] = Question.objects.all().annotate(
    answer_count=Count('answers')
)

然后,您可以使用{{ question.answer_count }}访问每个问题的计数。

答案 2 :(得分:0)

为什么不使用:Question.objects.all().count()

对于我的项目,我在“信息”模型中有一个字段

users_like = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="%(app_label)s_%(class)s_likes", blank=True)

我使用下面的代码计算点赞次数,然后在“管理员列表”页面中显示。

# admin.py
from django.contrib import admin

from .models import Info
class InfoAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'like_count',)
    def like_count(obj):
        return obj.users_like.all().count()

admin.site.register(Info, InfoAdmin)

结果是: image 希望这些可以帮助您!