在 django admin 中更改字段名称

Posted

技术标签:

【中文标题】在 django admin 中更改字段名称【英文标题】:Change field name in django admin 【发布时间】:2013-09-02 03:48:07 【问题描述】:

我正在自定义 django admin,我想更改我的字段的显示名称。 我认为答案是here,但我找不到。 感谢 Meta 类,我已经更改了表名。我还对字段进行了排序、收集、折叠...

【问题讨论】:

【参考方案1】:

查看 Field.label。 看到这个:https://docs.djangoproject.com/en/dev/ref/forms/fields/#label

基本上是

class MyForm(forms.Form):
    name = forms.CharField(label='My Name')

但这需要扩展管理员,这可能比你想做的要多。

【讨论】:

我已经找到了这个答案,但是我在哪里可以找到那些用于构建管理 UI 的表单?基本上,我不需要为管理 UI 调用那些......我假设在 /usr/local/lib/python3.3/dist-packages/django/contrib/admin 的某个地方...... 你应该安装 django 调试工具栏。它将显示为任何视图渲染和扩展的所有模板。 我在安装调试工具栏时遇到了麻烦,但我认为它什么时候会有用!【参考方案2】:

我正在寻找的是:

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

感谢您的帮助!

【讨论】:

值得注意的是,这也会更改所有非管理员表单中的标签(以及您使用 verbose_name 的任何其他地方)。【参考方案3】:

在模型字段上设置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

【讨论】:

以上是关于在 django admin 中更改字段名称的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Django Admin 自定义列表字段标签

在 Django admin 中更改日期字段的默认小部件

如何在 Django Admin 中更改 OneToOne 模型字段默认消息?

Django Admin -> 更改字段顺序,包括内联字段

更改列表页面上的 django admin 附加字段

您可以更改 Django Admin 应用程序中的字段标签吗?