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)
我们现在使用 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)