2017-08-15 22 views
0

問題是,如果允許數據庫排序結果,它會根據C語言環境對字符串進行排序,這會在我的語言中產生非常錯誤的結果。例如,它認爲所有帶有變音符號的字母都是ASCII格式的字母 - 例如,śz之後,而它應該在st之間。我可以強制Django在Python中而不是在數據庫中對管理結果進行排序嗎?

但是,只要允許我使用Python排序結果,我就可以輕鬆地告訴Python如何根據當前語言環境進行排序。 setlocale(LC_ALL, 'pl_PL.UTF-8'),然後將排序的關鍵字設置爲應用於模型的字符串表示的strxfrm的結果。

那麼,如何強制Django在Python中對Admin進行排序而不是在數據庫中繞過上述問題?

+3

您是否研究過在數據庫中設置排序規則?如果沒有特定的原因你不能或不想這樣做,那麼這將更普遍地解決問題。 –

+0

@PeterDeGlopper該數據庫目前是SQLite,據我所知,它不支持在一般情況下設置排序規則,但僅限於每個查詢。我可能在這裏錯了,是嗎? – gaazkam

+0

我不是SQLite的專家,但從文檔看來,它並不像它提供的任何排序規則,在這裏很有用。所以,看起來像用Python做它是最好的選擇,只要你在SQLite上。 'get_queryset'答案似乎是一個很好的方法,而不是我尋找替代品。 –

回答

3

作爲一個評論者指出,正確地獲取數據庫集中的排序規則似乎是一個更合適的解決方案,尤其是因爲數據庫是以高性能方式(排序,排序等)完成這些類型的事情。但是,如果您更喜歡使用python,則可以在管理類中覆蓋get_queryset方法,然後在其中放入任何代碼,如the docs所示。

+0

數據庫目前是SQLite,據我所知,它不支持在一般情況下設置排序規則,但僅限於每個查詢。我可能在這裏錯了,是嗎? – gaazkam

+0

我不認爲SQLite支持整理設置。你計劃在SQLite的生產環境中運行嗎?我認爲這不是特別常見,人們通常只將它用於本地開發,然後使用標準數據庫系統進行生產。 – MrName

+0

這是一個學術任務...所以,雖然SQLite可能不是在生產中運行的最佳選擇,但我認爲這不是一個問題。 – gaazkam

相關問題