【问题标题】:Django admin model plural mode global settings, not adding suffix 's'django管理模型复数模式全局设置,不加后缀's'
【发布时间】:2015-11-01 08:17:07
【问题描述】:

我们现在正在使用 Django。

我们的语言是中文。

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

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

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

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

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

【问题讨论】:

    标签: python django model pluralize plural


    【解决方案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-12-21
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2014-05-14
    • 2017-02-20
    • 2013-03-04
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多