gpt4 book ai didi

python - Django:如何订购查询集并将一些项目移动到查询集的末尾

转载 作者:行者123 更新时间:2023-12-05 02:46:38 27 4
gpt4 key购买 nike

我的 Django 应用程序中有一个查询集:

databytes_all = DataByte.objects

databytes_all 查询集中的每个项目都有许多属性,但其中之一是 publish_date

我想在 publish_date 之前订购查询集,但是如果 publish_dateNone,我希望该项目位于查询集的结尾。

这是我正在尝试的方法,但它不起作用:

databytes_all = DataByte.objects

制作一个查询集:过滤掉所有为 None 的发布日期

no_date = databytes_all.filter(publish_date=None)

创建另一个查询集:排除所有发布日期为 none 的项目,然后按发布日期对剩余项目进行排序

databytes_with_date = databytes_all.order_by('-publish_date').exclude(publish_date=None)

现在组合两个查询集(但这不起作用 - 没有发布日期的项目在列表中排在第一位,而我希望它们排在最后)

databytes = databytes_with_date | no_date 

最佳答案

你不需要过滤,你可以指定NULL应该放在最后:

from django.db.models import F

databytes_all.order_by(F('publish_date')<b>.desc(nulls_last=True)</b>)

因此我们在这里使用 F object [Django-doc]我们称之为 .desc(…) method [Django-doc] .此方法有一个 nulls_last=... 参数,我们可以使用该参数指定应选择具有 NULL 的项目作为最后记录。

这将排序为:

SELECT …
FROM …
ORDER BY <b>publish_date IS NULL</b>, publish_date DESC

由于 False/0 被认为小于 True/1,因此它将移动项目publish_date 到您检索的记录的底部。

关于python - Django:如何订购查询集并将一些项目移动到查询集的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65399791/

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