我可以在Django管理员中对忽略前导空格的项进行排序吗?

时间:2018-04-04 20:46:28

标签: python django sorting django-admin

我正在使用Django(v1.4.22)应用程序,该应用程序包含许多重复项目,但空格除外,因此管理员对其进行排序"错误"。

我知道正确的解决方案是敲击一些SQL并删除这些空格,但目前我想帮助我们的用户。此外,我还不能,因为名称字段是UNIQUE等等。

class Meta:
    get_latest_by = 'date_created'
    ordering = ['name'] // --> Can I do something with this, like name.strip()? 

3 个答案:

答案 0 :(得分:3)

除了使用Paulo显示的ordering之外,您还可以使用“trimmed”值更改要订购的默认查询集(假设您的数据库支持TRIM)。在 admin.py

def get_queryset(self, request):
    qs = super().get_queryset(request)
    qs = qs.extra(select={'trimmed_name':'TRIM(name)'}).order_by('trimmed_name')
    return qs

(注意:这在开发分支中作为Django数据库函数添加为Trim

答案 1 :(得分:3)

您可以在ordering中使用query expressions;特别是,您可以使用Func() expressions。在你的情况下:

from django.db.models import F, Func

...

class Meta:
    get_latest_by = 'date_created'
    ordering = [Func(F('name'), function='TRIM')]

我在PostgreSQL上对此进行了测试,但它确实有效。

答案 2 :(得分:0)

如果您有一个字符串列表(或其他可迭代集合),您可以执行以下操作:

mylist = [some strings]
mylist.sort(key=lambda s: s.strip())

这将对mylist进行排序,忽略左/右间距而不实际删除空格