2010-05-27 52 views
0

我需要訂購按日期倒序一個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) 

有是更有效的方式嗎?

回答

3
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

0

因此,您正在尋找所有有日期的對象......以及所有沒有日期的對象?

這豈不是更好地工作:

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