在 Django 管理后台中更改字段名称

9
我正在自定义django admin,希望能够更改字段的显示名称。我认为答案在这里,但我找不到。我已经通过Meta类更改了表名,也对字段进行了排序、收集和折叠...
3个回答

32

我想要的是:

name = models.CharField(max_length=200, verbose_name="Nom")

感谢你的帮助!无论如何都要感谢。


7
值得注意的是,这也会更改您所有非管理员表单中的标签(以及您使用verbose_name的任何其他地方)。 - Tom Carrick

12

接受回答中所述,在模型字段上设置 verbose_name 确实有效,但它具有一些缺点:

  • 它还会影响非管理表单中的字段标签,如评论中所提到的

  • 它改变了模型字段的定义,因此会导致新的迁移

如果您想更改在管理站点上显示的字段名称,则可以像此其他答案建议的那样覆盖整个表单,或通过扩展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

请注意,在 Django 2.2.16 中,如果字段在 readonly_fields 中,则此方法无效,因为该字段将从 form.base_fields 中排除(请参见 源代码)。在这种情况下,一种解决方法是从 readonly_fields 中移除该字段,并通过在 get_form() 中添加另一行来禁用它:

form.base_fields['my_model_field_name'].disabled = True

6

我已经找到了这个答案,但是我在哪里可以找到用于构建管理UI的那些表单?基本上,我不需要为管理UI调用它们... 我猜应该在 /usr/local/lib/python3.3/dist-packages/django/contrib/admin 中的某个地方... - HydrUra
1
你应该安装 Django Debug Toolbar,它将为任何视图显示所有已呈现和扩展的模板。 - Rob L
我安装debug-toolbar遇到了麻烦,但是一旦安装成功,我认为它会非常有用! - HydrUra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接