2017-08-15 23 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

相关问题