2011-04-29 55 views
0

很多搜​​索,到目前爲止沒有發現任何東西。另一個QuerySet自定義排序問題

在我的django應用程序中,Model_X由我的用戶使用非常標準的評分模型進行評分。我有一個獨立的函數處理大量的數據,並且當給定用戶實例時,返回元組列表。第一個值對應於Model_X實例的主鍵,第二個值是預測評級。例如,它可能會返回以下元組列表。

[(1L, 5.25), (5L, 3.1), (23L, 1.83)] 

我需要返回一個QuerySet(和它需要一個QuerySet)Model_X的,只有包含在元組中列出的情況下,通過從元組這些預測的評分進行排序。

+0

我知道我可以使用排序蟒蛇()函數做到這一點,但我需要這個返回一個QuerySet這在我的理解不能與排序()函數來完成。 – 2011-04-29 04:05:07

+0

你可以添加一些解釋你模型的代碼嗎?我不明白你的例子代表什麼。來自一個模型及其實例或來自不同模型的字段值組合實例? – 2011-04-29 04:12:02

+0

我已經重新提出了我的問題,希望能夠使它更清晰。這有幫助嗎?在這個過程中,模型中的字段值根本不起作用。 – 2011-04-29 06:28:12

回答

0

使用列表而不是QuerySet。你可以使用in_bulk

+0

在多個地方非常具體,我正在尋找一個返回QuerySet的解決方案。 – 2011-04-29 14:04:47

1

如果你已經預定了你的評級元組列表,你可能可以使用Ordering by the order of values in a SQL IN() clause

如果你使用MySQL,那麼field()函數應該適合你。從您排序的評分元組中提取所有ID,[x[0] for x in sorted_tuples],然後使用該ID列表構建您的where子句,例如, (未經測試),

Model_X.objects.raw('select * from myapp_model_x where id in (5,1,23) order by field(id,5,1,23)']) 
+0

我可能會犯這個錯誤,但是使用你的語法,它會在where語句裏的'order by field ...'語句處開始出錯。 – 2011-04-29 20:17:27

+0

啊,那很不幸。您可能必須下拉到[原始查詢](http://docs.djangoproject.com/en/dev/topics/db/sql/)才能正確運行。你在使用MySQL嗎? – 2011-04-29 20:38:15

+0

我只是求助於我的替代方案,即使用python的排序並重寫我的視圖。我不相信這是不可能的。似乎需要解決一個重大缺陷。 – 2011-05-02 14:49:06