我需要訂購按日期倒序一個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)
有是更有效的方式嗎?
我需要訂購按日期倒序一個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