如何将两个django查询集合在一起?

问题描述:

我需要订购按日期倒序一个QuerySet,但我需要把最终在年底的对象,我这样做:如何将两个django查询集合在一起?

qs1 = Model.objects.exclude(date=None).order_by('-date') 
qs2 = Model.objects.filter(date=None).order_by('-date') 

,我的名单是:

l = list(qs1)+list(qs2) 

有是更有效的方式吗?

Model.objects.extra(select={'nodate':'ISNULL(date)'}, order_by=['nodate', '-date']) 
+0

在postgres中不起作用 – diegueus9 2010-06-02 22:56:53

+0

那么就用''date IS NULL''来代替。 – 2010-06-02 23:58:24

因此,您正在寻找所有有日期的对象......以及所有没有日期的对象?

这岂不是更好地工作:

Model.objects.order_by('-date) 

不管怎么说,这是一个良好的开端...了解Django的过滤器链接:http://docs.djangoproject.com/en/dev/topics/db/queries/#id1

作为一个方面说明,是不是你的查询取消自己?

>>> d = MyModel.objects.filter(date=None).exclude(date=None).order_by('-date') 
>>> d 
[] 
>>> d.query.get_compiler('default').as_sql() 
('SELECT "date" FROM "table" WHERE ("table"."date" IS NULL AND NOT ("table"."date" IS NULL)) ORDER BY "table"."date" DESC',())

我可能不理解你的要求......

+0

这些查询似乎相互抵消......除非它是与分组,我”我只是没有看到。看起来@diegueus可能希望列表末尾没有日期的对象,也许.order_by(' - date')将它们放在开头? – 2010-05-28 15:09:13

+0

Chris你是对的 – diegueus9 2010-06-02 22:57:21