我正在使用Django(v1.4.22)应用程序,该应用程序包含许多重复项目,但空格除外,因此管理员对其进行排序"错误"。
我知道正确的解决方案是敲击一些SQL并删除这些空格,但目前我想帮助我们的用户。此外,我还不能,因为名称字段是UNIQUE等等。
class Meta:
get_latest_by = 'date_created'
ordering = ['name'] // --> Can I do something with this, like name.strip()?
答案 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
进行排序,忽略左/右间距而不实际删除空格