如何将两个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'])
因此,您正在寻找所有有日期的对象......以及所有没有日期的对象?
这岂不是更好地工作:
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',())
我可能不理解你的要求......
这些查询似乎相互抵消......除非它是与分组,我”我只是没有看到。看起来@diegueus可能希望列表末尾没有日期的对象,也许.order_by(' - date')将它们放在开头? – 2010-05-28 15:09:13
Chris你是对的 – diegueus9 2010-06-02 22:57:21
在postgres中不起作用 – diegueus9 2010-06-02 22:56:53
那么就用''date IS NULL''来代替。 – 2010-06-02 23:58:24