2010-02-11 62 views
3

(請讓我知道這是完全荒謬的,這也許就是爲什麼我還沒有發現任何關於此的一個原因。)有沒有辦法讓查詢尊重輸入參數的順序?

這個故事有兩種型號RankingArtistRanking是一般涉及到Artist (object_id,content_type ...整個shebang)。

我有一個由Ranking.objects.values_list()返回的對象返回的對象列表(我的例子是score)。很顯然,如果我想顯示已排名的藝術家列表,我希望他們的順序相同。我已經嘗試了不同的方法,例如.filter(pk__in=list),.in_bulk(list)等。試圖強制.values_list()的結果也成爲一個元組。

他們都拿我的列表:

>>> objects = Ranking.objects.filter(<stuff>).order_by('score') 
>>> objects_list = objects.values_list('object_id', flat=True) 
>>> objects_list 
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37] 

而像那麼回事吧:

>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True) 
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14] 

(我只是給在第二種情況下的ID爲理智的緣故。)

現在,我可以完成這項工作的唯一方法是創建一個空列表,並通過非values_list()查詢進行循環。

for item in objects: 
    ranked_items.append(item.content_object) 

這只是產生n查詢,所以我想知道是否有更好的方法。如標籤所示,我使用的是PostgreSQL。

回答

2

這不是由Django引起的;由於沒有指定順序,因此數據庫按此順序返回它們。

+0

謝謝,我想我的問題必須是PostgreSQL支持。 – 2010-02-12 23:28:38

相關問題