Django admin model复数模式全局设置,不加后缀's'

Django admin model plural mode global settings, not adding suffix 's'

我们现在使用 Django。

我们的语言是中文

虽然你知道,在中文语法中,复数大小写通常与单数大小写相同。至少,不只是在单词后面加一个英文字母's'。

所以,由于我们把每个模型类的verbose_name设置为中文,发现在管理面板中,所有模型都显示为XX。

现在我们必须手动设置复数,就像 verbose_name 本身一样:

class Meta:
    db_table = 'the_table_name'
    verbose_name = 'object_name'
    verbose_name_plural = 'object_name'

那么,有没有办法设置全局复数转换规则呢?

指定 'verbose_name_plural' 是覆盖 django 模型中元选项的简单方法。但是如果你想以编程方式设置它,那么你可以通过定义你自己的 meta class 来做到这一点:

from django.db.models.base import ModelBase

class CustomModelMetaClass(ModelBase):

    def __new__(cls, name, bases, attrs):
        klas = super(CustomModelMetaClass, cls).__new__(cls, name, bases, attrs)
        klas._meta.verbose_name_plural = klas._meta.verbose_name

        return klas

现在像这样在你的模型中使用这个元class

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    __metaclass__ = CustomModelMetaClass

它将 verbose_name_plural 设置为与 verbose_name 相同。要验证此打开 shell,请导入模型 Poll 并打印

unicode(Poll._meta.verbose_name_plural)
unicode(Poll._meta.verbose_name)