在 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 中更改字段名称的主要内容,如果未能解决你的问题,请参考以下文章