1

我们现在使用 Django。

我们的语言是中文。

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

所以,既然我们已经把verbose_name每个Model类都设置为中文,发现在管理面板中,所有的Models都显示为XX。

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

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

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

4

1 回答 1

1

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

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 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)
于 2015-08-09T16:28:02.483 回答