我可以强制Django在Python中而不是在数据库中对管理结果进行排序吗?

我可以强制Django在Python中而不是在数据库中对管理结果进行排序吗?,python,django,sorting,django-admin,Python,Django,Sorting,Django Admin,问题是,如果允许数据库对结果进行排序,它会根据C语言环境对字符串进行排序,这在我的语言中会产生非常错误的结果。例如,它认为所有带变音符号的字母都在ascii字母之后,因此,例如,ś位于z之后,而它应该位于s和t之间 但是,只要允许我在Python中对结果进行排序,我就可以轻松地告诉Python如何根据当前区域设置进行排序setlocale(LC_ALL,'pl_pl.UTF-8')然后将排序键设置为应用于模型字符串表示的strxfrm的结果 那么,我如何才能迫使Django在Python中以Ad

问题是,如果允许数据库对结果进行排序,它会根据C语言环境对字符串进行排序,这在我的语言中会产生非常错误的结果。例如,它认为所有带变音符号的字母都在ascii字母之后,因此,例如,
ś
位于
z
之后,而它应该位于
s
t
之间

但是,只要允许我在Python中对结果进行排序,我就可以轻松地告诉Python如何根据当前区域设置进行排序
setlocale(LC_ALL,'pl_pl.UTF-8')
然后将排序键设置为应用于模型字符串表示的
strxfrm
的结果


那么,我如何才能迫使Django在Python中以Admin而不是数据库中对结果进行排序以避免上述问题呢?

正如一位评论员所指出的那样,在数据库集中正确地获取排序规则似乎是一个更合适的解决方案,特别是因为数据库是以一种高效的方式完成这类工作的(分类、排序等)


但是,如果您更喜欢用python进行此操作,则可以重写admin类中的
get\u queryset
方法,并将所需的任何代码放在其中,如中所示。

正如一位评论员指出的那样,在数据库集中正确地获取排序规则似乎是一个更合适的解决方案,特别是因为数据库是用来执行以有效的方式(分类、排序等)确定事物的类型



但是,如果您更喜欢使用python,您可以重写admin类中的
get\u queryset
方法,并将所需的任何代码放入其中,如中所示。

您是否研究过在数据库中设置排序规则?如果没有具体原因,这将更普遍地解决问题在。@PeterdGlopper数据库目前是SQLite,据我所知,它不支持在genenal中设置排序规则,但只支持在每个查询的基础上设置排序规则。我在这里可能错了ofc,是吗?我不是SQLite方面的专家,但从文档来看,它在这里似乎没有提供任何有用的排序规则。因此,看起来用Python进行排序是最好的选择选项,只要您在SQLite上。
get\u queryset
答案似乎是一个很好的方法,这并不是我一直在寻找替代方法。@PeterdGlopper,但我不知道如何强制Django按查询的每个
顺序执行此操作。如果数据库排序规则按照您的意愿工作,Django默认情况下应该使用它。您可能没有这样做o在模型上指定
ordering
meta参数:-它告诉Django要对哪个字段进行排序,而排序规则告诉数据库如何实现排序。您是否研究过在数据库上设置排序规则?如果没有具体原因,这将更普遍地解决问题。@PeterDeGlopper数据库目前是SQLite,据我所知,它不支持在genenal中设置排序规则,但只支持在每个查询的基础上设置排序规则。我在这里可能错了ofc,是吗?我不是SQLite方面的专家,但从文档中看,它似乎没有提供任何在这里有用的排序规则。因此,看起来用Python进行排序是最好的选择只要您在SQLite上,
get\u queryset
答案似乎是一个很好的方法,我并没有寻找替代方法。@PeterdGlopper,但我不知道如何强制Django按
查询的每个
顺序执行此操作。如果数据库排序规则按您的意愿工作,Django默认情况下应该使用它。您可能需要指定在模型上设置
ordering
元参数:-这告诉Django要对哪个字段进行排序,而排序规则告诉数据库如何实现排序。据我所知,数据库目前是SQLite,它不支持在genenal中设置排序规则,而只支持按查询设置排序规则。我在这里可能错了ofc,是吗?我不认为是SQLite支持排序规则设置。您是否计划在SQLite上运行生产环境?我认为这并不常见,人们通常仅将其用于本地开发,然后使用标准数据库系统进行生产。这是一项学术任务……因此,尽管SQLite可能不是在生产环境中运行的最佳选择,但我不认为这是一个好的选择nk这是一个问题。谢谢你的回答,但是,tbh,我仍然不确定我应该怎么做。我知道有可能覆盖
get\u queryset
,事实上我已经出于不同的原因这样做了。但是,我不确定这有什么帮助。首先,好吧,负责订购的代码甚至不属于
get\u queryset
。相反,当用户单击admin中的orderable列时,Django会自动将
order\u by()
附加到
get\u queryset
返回的任何查询中。而且
get\u queryset
应该返回
queryset
(duh),当将
排序
应用于
查询集时
返回一个列表,我误解了你的问题@gaazkam,你试图覆盖管理部分中的可点击过滤器。我已经很久没有这样做了,我会做一些研究并回复你。数据库目前是SQLite,据我所知,它不支持ort在genenal中设置排序规则,但仅基于每个查询。我在这里可能错了ofc,是吗?我认为SQLite不支持排序规则设置。您是否计划在SQLite上运行生产?我认为这并不常见,人们通常只将其用于本地开发,然后使用标准数据库系统进行生产。不是吗他的任务是学术性的……因此,虽然SQLite可能不是在生产中运行的最佳选择,但我不认为这是一个问题。谢谢你的回答,但是,tbh,我仍然不确定该如何做。我知道有可能覆盖
get_queryset
,事实上,我已经为不同的目的完成了这项工作