【问题标题】:In my django admin change_list, there are names with diacritics. How to order them properly?在我的 django admin change_list 中,有带有变音符号的名称。如何正确订购它们?
【发布时间】:2019-12-25 14:25:33
【问题描述】:

我将它与 Python 3.6.5 一起使用。在我的 Django 2.1 应用程序中,我有一个这样的模型对象:

class Person(models.Model):
    name = models.CharField(max_length=64)

有些名字带有变音符号。在我的admin.py 中,我有:

from django.contrib import admin
from .models import Person

class PersonAdmin(admin.ModelAdmin):
    ordering = ['name']

admin.site.register(Person, PersonAdmin)

所以,这是我在访问 change_list 管理视图时得到的默认顺序:

Joseph
Josué
José
Éderson

但我需要它们按此顺序显示:

Éderson
Joseph
José
Josué

另外,当我有一个列表时,我有一个排序键来做这个技巧:

import locale

def sort_key_BR():
    locale.setlocale(locale.LC_ALL, "pt_BR.UTF-8")
    return locale.strxfrm

names = ['Joseph', 'Josué', 'José', 'Éderson']
names.sort(key=sort_key_BR())
for n in names:
    print(n) # Éderson Joseph José Josué

值得一提的是,在我项目的settings.py 中,我已经有了:

LANGUAGE_CODE = 'pt-BR'

在 Django 模型中,通知排序键而不是默认 ordering 的正确方法是什么?相反,这样做的正确方法是什么?

【问题讨论】:

  • 项目在数据库中排序。这听起来像是您的数据库排序规则的问题。
  • 即使我的数据库有问题,我不认为是这种情况,ordering 正在根据 @ 中的字符串对我的数据(在此示例中为升序)进行排序987654332@字段后查询。不是吗?
  • 我不明白你的问题。管理视图要求您的数据库按排序顺序返回项目,Python 中没有排序。
  • 好吧,我不知道。我会试着调查一下,谢谢。

标签: python django diacritics


【解决方案1】:

我建议您使用其他带有自动填充功能的文件并收起“é”和其他东西:

class Person(models.Model):
    name = models.CharField(max_length=64)
    url = models.CharField(max_length=64)

    def save(self, *args, **kwargs):
        self.url = self.name.replace("é", "e").lower()
        super(Person, self).save(*args, **kwargs)

然后在 admin.py 中:

from django.contrib import admin
from .models import Person

class PersonAdmin(admin.ModelAdmin):
    ordering = ['url']

admin.site.register(Person, PersonAdmin)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2011-09-18
    • 2012-12-10
    • 2018-04-12
    • 1970-01-01
    • 2020-12-16
    • 2013-04-12
    相关资源
    最近更新 更多