【发布时间】:2020-10-31 23:43:41
【问题描述】:
我正在研究我项目的搜索部分。在我的一个过滤器上,我必须使用 sorted() 函数。代码:-
posts = Post.objects.filter(title__icontains=query)
posts = sorted(posts, key=lambda obj: obj.titleFilter())
但是,在项目的其他过滤器中,我不必使用 sorted,因为它可以使用 django annotate 等来完成。所以,在模板中我通常必须做posts.count,除了标题过滤器。
我的模板,代码:-
<div>{{ posts.count }} results found.</div>
我知道,我可以使用模板中的 if 案例来工作并应用 length 函数,例如:
<div>
{% if title_filter %}
{{ posts|length }}
{% else %}
{{ posts.count }}
{% endif %} results found.
</div>
另外,我不确定长度是否合适,因为有些文章不使用 length 进行查询集。
谢谢!!!欢迎随时提问。
【问题讨论】:
-
sorted不再是QuerySet。这就是为什么如果您可以通过.order_by()订购通常会更好的原因之一。 -
但是,
order_by无法做到这一点,所以我不得不使用 sorted。 -
好吧,因为它不是一个查询集,因此它不再有
count。这里的posts是一个列表,而不是QuerySet。 -
那么,如果我在模板中使用
length会不会有问题。它会在计数之间产生差异吗?现在,顺便说一句,它没有任何区别。 -
不,没有区别。但是使用
QuerySet通常会更好,因为它是惰性的,并且可以轻松地与额外的调用链接。
标签: python-3.x django sorting django-templates django-queryset