2016-09-17 184 views
1

Django的查詢集ORDER_BY日期我想告訴在附近的頂部,在過去的記錄,以今天的日期,然後所有記錄在底部:附近今天

今天
明天
明天+ 1



昨天
昨天-1

+0

使用 - 在排序順序顛倒順序 –

回答

1

當然可以,你要的是的order_by降行爲。

最古的項目第一次。

Model.objects.order_by('creation_time') 

最新產品第一。(你想要的)

Model.objects.order_by('-creation_time') 

爲您編輯

你必須做兩個查詢,然後將其評估爲列表做你笏什麼,你不能做這樣的事與Django的ORM的查詢。

實際上,結合查詢使用|運營商不會保留你想要的訂單,所以你不能用2個Django查詢來做到這一點。

qset = Model.objects.all() 
result = qset.filter(creation=today) | qset.filter(creation_gte=today) | qset.filter(creation_lt=today) 

以下result將包含你想要的所有項目,但不會保留單查詢集排序。所以,不要去做你想要的東西。

因此,總之,您必須評估查詢集,並將它們作爲列表添加到一起以實現您想要的結果。

qset = Model.objects.all() 
result = list(qset.filter(creation=today)) + list(qset.filter(creation_gte=today)) + list(qset.filter(creation_lt=today)) 

或在一個更好的方式:

import itertools 
result = list(itertools.chain(qset.filter(creation=today), qset.filter(creation_gte=today), qset.filter(creation_lt=today))) 

不要忘記做order_by S IN每個查詢集命令結果的每一部分,只要你想,對代碼的簡潔,我沒在這裏寫下它們。

+0

我更新的問題,我不太清楚 –

+0

@RodrigoTravessini你不能做這樣的事情,而無需通過Django的查詢集(即**查詢集的私有方法的黑客攻擊你的方式。 _result_cache **),我已經更新了我的答案。 – SpiXel