如何从默认 Django 模型重命名模型字段?

Posted

技术标签:

【中文标题】如何从默认 Django 模型重命名模型字段?【英文标题】:How to rename a model field from default Django model? 【发布时间】:2020-01-10 20:43:03 【问题描述】:

我想将 Django admin 中的所有 Groups 字段重命名为 Roles 字段。但仍有一些部分没有改变。

我已使用此代码 (models.py) 成功地将组重命名为角色:

class Role(Group):
    class Meta:
        proxy = True
        app_label = 'auth'
        verbose_name = _('role')
        verbose_name_plural = _('roles')

    def __str__(self):
        return self.name

但是用户中的一个字段仍然包含名称“组”。 Please see screenshot attached.

我知道这与 django.contrib.auth.models 中的 PermissionsMixin 有关,其中包含在 UserAdmin 中调用的 ManyToManyField 命名组。

class PermissionsMixin(models.Model):
    ...
    groups = models.ManyToManyField(
        Group,
        verbose_name=_('groups'),
        blank=True,
        help_text=_(
            'The groups this user belongs to. A user will get all permissions '
            'granted to each of their groups.'
        ),
        related_name="user_set",
        related_query_name="user",
    )
    ...

我想知道如何重命名这个模型字段。

编辑: 这是 UserAdmin 的代码:

    class UserAdmin(BaseUserAdmin):
        form = UserAdminChangeForm
        add_form = UserAdminCreationForm

        list_display = ('username',)
        fieldsets = (
            (None, 'fields': ('username', 'password',)),
            (None, 'fields': ('groups',)),
        )
        add_fieldsets = (
            (None, 
                'classes': ('wide',),
                'fields': ('username', 'password1', 'password2')
            ),
        )
        filter_horizontal = ('groups',)

【问题讨论】:

请提供您所指的代码。 嗨,@CalebGoodman 先生!我已经添加了我所指的代码。 谢谢。我现在正在调查这个。你能告诉我你用来生成图像的代码吗?我熟悉 django,只是不熟悉 admin 包。 @CalebGoodman 先生,我再次对其进行了编辑。希望现在更清楚。谢谢! 【参考方案1】:

您几乎肯定不想重命名模型字段,而只是在管理中更改标签。您可以通过自定义管理表单来实现这一点。以下几行应该可以解决问题:

class UserAdmin(BaseUserAdmin):
    # ...
    def get_form(self, request, obj=None, change=False, **kwargs):
        kwargs['labels'] = 'groups': 'roles'
        return super().get_form(request, obj=obj, change=change, **kwargs)

【讨论】:

谢谢先生,它成功了。但是,我也想更改过滤器字段中的标签(从“可用组”到“可用角色”和“选择的组”到“选择的角色”),我不知道是否还有一种方法可以简单地改变无需修改 django 的默认模型字段。

以上是关于如何从默认 Django 模型重命名模型字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 重命名模型?

Django - 如何使用 South 重命名模型字段?

Django 1.8:删除/重命名数据迁移中的模型字段

如何在 Django Admin 中为作为方法//属性的字段重命名列标签?

如何重命名 Django 应用程序并将数据从一个应用程序迁移到另一个应用程序

如何正确重命名 wagtail 页面模型