【问题标题】: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 通常会更好,因为它是惰性的,并且可以轻松地与额外的调用链接。

标签: python-3.x django sorting django-templates django-queryset


【解决方案1】:

排序后的帖子不再是 QuerySet。 你可以这样做

posts = Post.objects.filter(title__icontains=query)
count = posts.count()
posts = sorted(posts, key=lambda obj: obj.titleFilter())

将计数作为变量发送

【讨论】:

  • 是的,我能做到。但是,根据@Willem,长度并没有什么不同。我会坚持上一个。但是,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 2021-10-17
  • 2022-01-14
  • 2018-05-08
相关资源
最近更新 更多