Отображение пользовательской формы в админке Django - PullRequest
0 голосов
/ 08 апреля 2019

Я создал пользовательскую модель с country в ней:

models.py

class CustomUser(AbstractUser):
    country = models.CharField(max_length=50, default="None")

Затем добавлены пользовательские формы с полем формы country, которое является ChoiceField и отображает все страны:

forms.py

class CustomUserCreationForm(UserCreationForm):
    country = forms.ChoiceField(choices=sorted(COUNTRIES.items()), label="Country")

    class Meta(UserCreationForm):
        model = CustomUser
        fields = '__all__'


class CustomUserChangeForm(UserChangeForm):
    country = forms.ChoiceField(choices=sorted(COUNTRIES.items()), label="Country")
    class Meta(UserChangeForm):
        model = CustomUser
        fields = '__all__'

Тогда я зарегистрировал его в админке с помощью:

admin.py

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email', 'username', 'is_staff',]


admin.site.register(CustomUser, CustomUserAdmin)

Он зарегистрирован и все работает нормально, я могу сохранить модель с помощью оболочки Django и программно, но не могу отобразить ее в консоли администратора. Когда я пытаюсь создать нового пользователя от администратора, я просто вижу три поля - имя пользователя, пароль и подтверждение пароля.

Нужно ли расширять шаблон администратора для отображения этого нового поля?

1 Ответ

0 голосов
/ 08 апреля 2019

Для этого вам нужно будет add_fieldsets под CustomUserAdmin в admin.py:

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email', 'username', 'is_staff',]

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'password1', 'password2', 'country'),
        }),
    )


admin.site.register(CustomUser, CustomUserAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...