Django 自定义用户未将带有外键的额外字段显示为 Select 列表

Django Custom User is not showing a extra field with foreign key as Select list

我有一个自定义用户

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)

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

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

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

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

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

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