2010-02-26 103 views
0

我爲我的Django模型設置了一個ordering='ordering_number' Meta屬性,認爲Django將在比較實例時使用它。 (ordering_number是在我的模型的IntegerField)Django模型的訂購

例如,如果我有ordering_number = 4實例a和實例bordering_number = 7,我期望a < bTrue。但是,我測試了它,似乎沒有工作。我不明白根據哪個邏輯a < b會出現爲True

有誰知道嗎?爲什麼Django不使用ordering進行元素比較?

回答

2

the documentation

爲對象的默認排序,用於獲取對象的列表時

所以,你比較不工作的原因是因爲他們沒有設計成辦法。定義__lt__()等來定義實例的排序。

+0

好的,我做了,它的工作原理。 但是,對所有的Django模型自動執行此操作不是一個好主意嗎? – 2010-02-26 16:23:15

+0

如果您對此感到激動,請提交RFE。 http://code.djangoproject.com/ – 2010-02-26 16:31:15

+1

@ cool-RR:不是不是個好主意。 *默認排序*並不一定意味着兩個對象也可以這樣比較。例如。在SO上,用戶的默認排序是通過名稱,但是根據他的聲譽,用戶可能比另一個「大」。這實際上是一個背景問題,只是應用默認的訂單也是因爲自然順序對商業模式imoh是一個巨大的干預。 – 2010-02-26 17:03:55