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

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

【问题讨论】:

    标签: database django django-models python-3.x django-admin


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2018-03-06
      • 2019-04-03
      • 2014-07-23
      相关资源
      最近更新 更多