Django Пользовательский пользователь не показывает дополнительное поле с внешним ключом в качестве списка выбора - PullRequest
0 голосов
/ 26 мая 2020

У меня есть собственный пользователь

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)

Но на странице администратора я это делаю не получить список выбора. Но поле ввода по умолчанию:

enter image description here

И если я отредактирую registration_code и попытаюсь сохранить, я получу:

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

Что звучит логично, потому что мне нужно ввести экземпляр RegistrationCode.

Такая же конструкция работает для других моделей, но для специального пользователя это не так ?? Это сводит меня с ума. Кто-нибудь знает, почему я не получаю список выбора?

1 Ответ

1 голос
/ 26 мая 2020

Django обрабатывать внешний ключ экземпляром модели, а не назначением. Итак, проблема исходит из вашего CustomUserChangeForm, где registratio_code должен быть ModelChoiceField

...