【发布时间】:2013-09-02 03:48:07
【问题描述】:
我正在自定义 django admin,我想更改我的字段的显示名称。 我认为答案是here,但我找不到。 感谢 Meta 类,我已经更改了表名。我还对字段进行了排序、收集、折叠...
【问题讨论】:
标签: database django django-models python-3.x django-admin
我正在自定义 django admin,我想更改我的字段的显示名称。 我认为答案是here,但我找不到。 感谢 Meta 类,我已经更改了表名。我还对字段进行了排序、收集、折叠...
【问题讨论】:
标签: database django django-models python-3.x django-admin
查看 Field.label。 看到这个:https://docs.djangoproject.com/en/dev/ref/forms/fields/#label
基本上是
class MyForm(forms.Form):
name = forms.CharField(label='My Name')
但这需要扩展管理员,这可能比你想做的要多。
【讨论】:
我正在寻找的是:
name = models.CharField(max_length=200, verbose_name="Nom")
感谢您的帮助!
【讨论】:
在模型字段上设置verbose_name,就像在accepted answer 中一样,确实有效,但它有一些缺点:
它还会影响非管理员表单中的字段标签,如评论中所述
它改变了模型字段的定义,因此导致了新的迁移
如果您仅想更改 admin 站点上字段的显示名称,您可以按照this other answer 中的建议覆盖整个表单,或者只需通过扩展ModelAdmin.get_form() 来修改表单字段标签,如下例所示:
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, change=False, **kwargs):
form = super().get_form(request, obj, change, **kwargs)
form.base_fields['my_model_field_name'].label = 'new name'
return form
请注意,如果该字段位于 readonly_fields(至少在 Django 2.2.16 中),这将不起作用,因为该字段将被排除在 form.base_fields 中(请参阅source)。在这种情况下,一种选择是从readonly_fields 中删除该字段并禁用它,方法是在get_form() 中添加另一行:
form.base_fields['my_model_field_name'].disabled = True
【讨论】: