Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何订购queryset并将一些项目移动到queryset的末尾_Python_Django_Django Queryset - Fatal编程技术网

Python Django:如何订购queryset并将一些项目移动到queryset的末尾

Python Django:如何订购queryset并将一些项目移动到queryset的末尾,python,django,django-queryset,Python,Django,Django Queryset,我在Django应用程序中有一个查询集: databytes_all = DataByte.objects databytes\u allqueryset中的每个项都有许多属性,但其中一个属性是publish\u date 我想在publish\u date之前订购查询集,但是如果publish\u date为None,我希望该项位于查询集的末尾 这是我正在尝试的,但它不起作用: databytes_all = DataByte.objects 创建查询集:过滤掉所有没有的发布日期 no_d

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

databytes_all = DataByte.objects
databytes\u all
queryset中的每个项都有许多属性,但其中一个属性是
publish\u date

我想在
publish\u date
之前订购查询集,但是如果
publish\u date
None
,我希望该项位于查询集的末尾

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

databytes_all = DataByte.objects
创建查询集:过滤掉所有没有的发布日期

no_date = databytes_all.filter(publish_date=None)
进行另一个查询集:排除“发布日期”为“无”的所有项目,然后按“发布日期”对其余项目排序

databytes_with_date = databytes_all.order_by('-publish_date').exclude(publish_date=None)
现在合并两个查询集(但是这不起作用-没有发布日期的项目是列表中的第一个,而我希望它们是最后一个)


您不需要进行筛选,您可以指定
NULL
应该是最后一个:

from django.db.models import F

databytes_all.order_by(F('publish_date').desc(nulls_last=True))

由于
False
/
0
被视为小于
True
/
1
,因此它会将带有
publish\u date
的项目移动到您检索的记录底部。

您不需要过滤,您可以指定
NULL
应在以下项的最后:

from django.db.models import F

databytes_all.order_by(F('publish_date').desc(nulls_last=True))

由于
False
/
0
被认为小于
True
/
1
,因此它会将带有
publish\u date
的项目移动到您检索的记录的底部。

在Django中,您可以使用chain组合许多查询集 试试这个:

from itertools import chain

...

combined_results = list(chain(databytes_with_date, no_date))


在Django中,可以使用chain组合许多QuerySet 试试这个:

from itertools import chain

...

combined_results = list(chain(databytes_with_date, no_date))