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
我有一个自定义用户
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