2012-11-08 41 views
0

的子集或結果查詢集的隨機順序我有一個這樣的查詢:在Django

Listing.objects.all().order_by('-premium', 'title')

它像預期,返回所有高級班,然後再通過一切有序稱號。

現在我只需要隨機化premium結果的順序。那可能嗎?

回答

0

好的,我認爲在單個查詢中沒有解決方案。
所以,我已經解決了這個利用兩個查詢:

premium_results = Listing.objects.filter(premium=True).order_by('?') 
normal_results = Listing.objects.filter(premium=False).order_by('title') 

results = list(premium_results) + list(normal_results) 

注:我需要一個列表作爲輸出,否則,你可以使用Django的Q對象相結合的查詢結果。

0

您可以再次使用order_by進行排序title沒有premium

qs=Listing.objects.filter().order_by('-premium', 'title') 
qs2 = qs.order_by('title') # will be sorted on 'title' not 'premium' 

或快捷

Listing.objects.filter().order_by('-premium', 'title').order_by('title') 

注:我使用filter()代替all()爲初始設置。

+0

這樣,你在第二個'order_by'中按標題排序。我只需要隨機化優質結果,而不是其他。 –