在django admin的模型字段中修改动态verbose_name

时间:2010-05-20 10:09:57

标签: django django-models django-admin

我有这个样本模型与管理员一起工作

class Author(models.Model):
    name = models.CharField(_('Text in here'), max_length=100)

将verbose_name设置为ugettext_lazy'文字在这里',但有时,根据site_id,我想提供一个不同的详细名称,所以我用这种方式修改了 init

def __init__(self, *args, **kwargs):
    super(Author, self).__init__(*args, **kwargs)
    #some logic in here
    self._meta.get_field('name').verbose_name = _('Other text')

它有效,显示'其他文字'而不是'文字在这里'...除了第一次使用作者/添加视图。

¿这是正确的方法吗? ¿我怎样才能解决第一次问题?

提前致谢

2 个答案:

答案 0 :(得分:4)

不要修改模型的元素。正如你所发现的那样,模型定义中会发生各种各样的元类事件,会破坏事物。

而是定义自定义表单并在那里更改__init__方法中的字段标签。

答案 1 :(得分:1)

您只需添加verbose_name

class Author(models.Model):
    name = models.CharField(max_length=100, verbose_name = 'Other text')