我有3个模型,Entry模型和Category模型,我创建了中间模型CategoryEntry。
class Entry(models.Model):
entry_text = models.TextField()
class Category(models.Model):
user = models.ForeignKey(User)
category_text = models.CharField(max_length=200)
entries = models.ManyToManyField(Entry, through='CategoryEntry')
class CategoryEntry(models.Model):
category = models.ForeignKey(Category, related_name="related_entry_categories")
entry = models.ForeignKey(Entry)
viewed = models.BooleanField(default=False)
如何进入模板用户总计入门次数。 例如,我可以通过
获得总用户类别计数{{ user.category_set.count }}
所以我尝试了很多不同的方法,但不知道如何遵循下一个关系
{{ user.category_set.entries.count}}
{{ user.category_set.categoryentry_set.count}}
{{ user.category_set.all.categoryentry_set.count}}
{{ user.category_set.related_entry_categories.count }}
这甚至可以(好的事情)计算模板吗?或者有更好的方法吗? 谢谢!
答案 0 :(得分:0)
您的查询没有意义,因为category_set
是对象的集合而不是单个对象,因此您不能简单地要求category_set.entries.count
首先你必须考虑你想要的......你想要的吗?
category_set
中每个类别的条目的个别计数?category_set
中所有类别中的条目总数?对于前者,您需要annotate
查询集。这必须在视图而不是模板中完成,因为该方法需要参数:
from django.db.models import Count
user_categories = user.category_set.annotate(entry_count=Count('entries'))
# then pass the user_categories queryset into your template along with user
然后,您可以在模板中迭代user_categories
以显示各个计数:
{% for category in user_categories %}
No. of entries: {{ category.entry_count }}
{% endfor %}
对于后者,您可以在视图中再次使用aggregate
:
from django.db.models import Count
total = user.category_set.aggregate(entry_count=Count('entries'))
# note that aggregate method returns a dict:
print total['entry_count']
# then pass total['entry_count'] as a value into your template along with user