gpt4 book ai didi

模板中的Django注释值

转载 作者:行者123 更新时间:2023-12-04 15:47:08 25 4
gpt4 key购买 nike

是否可以访问模板中查询集的注释值?

例如,我将以下查询集传递给我的模板:

context[videos] = Videos.objects.annotate(view_count=Count(views)).order_by(view_count)[:100]

在我的模板中,我试图获得这样的观看次数:
{% for video in videos %}
{{ video.view_count }}
{% endfor %}

什么都不显示。

但是,如果我使用:
{{ video.views.count }}

看起来不错 - 但我相信第二个选项会重新计算观看次数。我想使用带注释的值,因为它应该已经被计算出来了。

最佳答案

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

关于名字:

the name for the annotation is automatically derived from the name of the aggregate function and the name of the field being aggregated. You can override this default name by providing an alias when you specify the annotation:


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

关于模板中的Django注释值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9474710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com