Django: добавление пользователя на страницу администратора с помощью пользовательской модели пользователя

Я определил пользовательскую модель пользователя в моем проекте Django, которая определяет 'email' как уникальный идентификатор. Я создал пользовательскую форму создания пользователя, следуя документации Django, и зарегистрировал ее в моем admin.py. Когда я запускаю веб-сервер, в консоли не появляется никаких ошибок.

Моя проблема в том, что add_form на странице администратора не отображается поле 'email', а только 'username', 'password1' и 'password2'

Я прочитал несколько руководств и учебников и проверил документацию Django, чтобы решить эту проблему, и боюсь, что я что-то упускаю.

settings.py

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users.apps.UsersConfig'
]

AUTH_USER_MODEL = 'users.NewUser'

model.py

forms.py

from django import forms
from django.contrib import admin
from django.core.exceptions import ValidationError

# Import custom user model
from django.contrib.auth import get_user_model
custom_user_model = get_user_model()


class CustomUserCreationForm(forms.ModelForm):
    """A form for creating new users. Includes all the required
    fields, plus a repeated password."""

    username = forms.CharField(label='Username', min_length=4, max_length=150)
    email = forms.EmailField(label='E-Mail')
    first_name = forms.CharField(label='First Name')
    last_name = forms.CharField(label='Last Name')

    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

    class Meta:
        model = custom_user_model
        fields = ('username', 'first_name', 'last_name')

    def clean_password2(self):
        # Check that the two password entries match
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise ValidationError("Passwords don't match")
        return password2

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()

        return user

admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin  # Helper Class for creating user admin pages

from .forms import CustomUserCreationForm  #, CustomUserChangeForm
from .models import NewUser, UserProfile


class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm

    model = NewUser

    list_display = ('email', 'username', 'date_joined', 'last_login', 'is_admin', 'is_staff')
    search_fields = ('email', 'username',)
    readonly_fields = ('date_joined', 'last_login',)

    filter_horizontal = ()
    list_filter = ()
    fieldsets = ()


admin.site.register(custom_user_model, CustomUserAdmin)

Добавьте этот код в CustomeUserAdmin:

class CustomUserAdmin(UserAdmin):
    .
    .
    .
    add_fieldsets = UserAdmin.add_fieldsets + (
        (None, {'fields': ('custom_field',)}),
    )

Похоже, что форма на странице администратора django создается на основе add_fieldsets. Я также не знаю, что на самом деле делает add_form.

Для получения дополнительной информации читайте документацию django: django docs about admin, Полный пример для пользователей Custome в django admin

Если вы используете пользовательский ModelAdmin, который является подклассом django.contrib.auth.admin.UserAdmin, то вам нужно добавить ваши пользовательские поля в fieldsets (для полей, которые будут использоваться при редактировании пользователей) и в add_fieldsets (для полей, которые будут использоваться при создании пользователя).

.
Вернуться на верх