首页 > 解决方案 > Django Custom User 没有显示带有外键的额外字段作为选择列表

问题描述

我有一个自定义用户

class CustomUser(AbstractUser):
    registration_code = models.ForeignKey(RegistrationCode, null=True)
    ...

    def __str__(self):
        return self.username

class RegistrationCode(models.Model):
    code = models.CharField(max_length=30, null=True, blank=True)

    def __str__(self):
        return self.code

在管理页面中,我希望能够设置“registration_code”。

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser

    list_display = ['email', 'username', 'registration_code']

    fieldsets = (
        (None, {
            'fields': ('email', 'username', 'registration_code')
        }),
    )

admin.site.register(CustomUser, CustomUserAdmin)

但是在管理页面上,我没有得到选择列表。但是默认输入字段:

在此处输入图像描述

如果我编辑registration_code并尝试保存,我会得到:

Cannot assign "'2'": "CustomUser.registration_code" must be a "RegistrationCode" instance.

这听起来合乎逻辑,因为我需要输入一个 RegistrationCode 实例。

相同的结构适用于其他模型,但对于自定义用户却不是?这真让我抓狂。有人知道为什么我没有得到选择列表吗?

标签: djangodjango-admin

解决方案


Django 通过模型实例处理外键而不是赋值。所以问题来自您的 CustomUserChangeForm ,其中 registratio_code 必须是 ModelChoiceField


推荐阅读