我填充下拉在我的models.py定義的值,是這樣的:如何根據自定義值列表來訂購Django查詢?
rank_choices = (
('King', 'King')
('Prince', 'Prince')
('Duke', 'Duke')
('Baron', 'Baron')
('Lackey', 'Lackey')
當我在特定時間顯示的人的名單與排名,我希望他們能夠出現在降序排名。
當前查詢(只是字母順序):
attendees = Rank.objects.filter(feast__id=feast__id).exclude(rank='Lackey').order_by('rank')
我應該如何改變這種通過在列表中的位置進行排序?
我正在考慮這個:
rank_choices = (
(0, 'King')
(1, 'Prince')
(2, 'Duke')
(3, 'Baron')
(4, 'Lackey')
但即使我能得到詳細值從數值後面,在訂購的任何改變都進行數據更改前返回不正確的值。有沒有更好的辦法?
選擇的解決方案
通過WIM的回答啓發,我最後做數據遷移改變行列數值和排序如下。
ranks = sorted(ranks, key=lambda x: int(x.rank))
我通過導入從我的模型rank_choices到我的意見,並與分選後的相應的職稱取代數值獲取詳細值回。
謝謝。我要試試這個。我需要顯示Rank對象及其fk對象的一些其他屬性,但也許我可以省略flat = 1,將多個列賦給values_list並使用它。 –
是的,只是在排序的調用中修改傳遞給'key'的參數 – wim
不能用Django指定ORDER BY表達式嗎?例如,當'國王'的情況下按順序排列,然後當'王子'然後是1 ...結束時輸入0'。 SQL允許您通過任何有效的表達式進行排序,而不僅僅是列。 –