这将是有意义的QuerySet aggregation method per-item, annotate(),有这样的名字,因为它标注(套)的聚合值给每个项目(模型实例)它的产量,像一个正常的场,例如:
# Build an annotated queryset
>>> q = Book.objects.annotate(Count('authors'))
# Interrogate the first object in the queryset
>>> q[0]
<Book: The Definitive Guide to Django>
>>> q[0].authors__count
2
# Interrogate the second object in the queryset
>>> q[1]
<Book: Practical Django Projects>
>>> q[1].authors__count
1
关于名称:
注记的名字会自动从总的名称派生函数和正在汇总的字段的名称。
>>> q = Book.objects.annotate(num_authors=Count('authors'))
>>> q[0].num_authors
2
>>> q[1].num_authors
1
例如有:
context['videos'] = Videos.objects.annotate(view_count=Count('views')).order_by('-view_count')[100:]
你可以使用:
[video.view_count for video in context['videos']]
哪个should be the same as使用可以通过提供一个别名,当您指定的注解覆盖此默认名称values_list():
Videos.objects.annotate(view_count=Count('views')).values_list('view_count', flat=True)
而且类似于:
{% for video in videos %}
{{ video.view_count }}
{% endfor %}
这就是说,不同于普通字段,the order in which filters are applied matters,你已经被警告B)
不应该在该“上下文[视频] = Videos.objects。 annotate(view_count = Count(views))。order_by(view_count)[:100]“be”context ['videos'] = Videos.objects.annotate(view_count = Count('views'))。order_by('view_count') [:100] “请发布您的实际代码,并且不要错过获得帮助的机会 – jpic 2012-02-28 01:12:57