有没有办法使用计数而不是长度来计算排序的查询集?
Posted
技术标签:
【中文标题】有没有办法使用计数而不是长度来计算排序的查询集?【英文标题】:Is there a way to count the sorted queryset using count instead of length? 【发布时间】: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
通常会更好,因为它是惰性的,并且可以轻松地与额外的调用链接。
【参考方案1】:
排序后的帖子不再是 QuerySet。 你可以这样做
posts = Post.objects.filter(title__icontains=query)
count = posts.count()
posts = sorted(posts, key=lambda obj: obj.titleFilter())
将计数作为变量发送
【讨论】:
是的,我能做到。但是,根据@Willem,长度并没有什么不同。我会坚持上一个。但是,谢谢。以上是关于有没有办法使用计数而不是长度来计算排序的查询集?的主要内容,如果未能解决你的问题,请参考以下文章
如何以正确的顺序链接查询集,而不是按日期排序,按foreignKey排序?