Django3: Причины возникновения полей ManyToMany: Неизвестное поле (поля) (имя пользователя) указано для User. Проверьте поля/наборы полей/исключающие атрибуты класса CustomUserAdmin

У меня есть пользовательская модель пользователя без имени пользователя, но с использованием электронной почты вместо него.

class User(AbstractUser):

    username = None
    email = models.EmailField(_("email address"), unique=True)
    uuid = models.CharField(max_length=36, default=uuid4, unique=True)
    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []
    objects = CustomUserManager()

    def __str__(self):
        return self.email

И модель проекта, в котором есть несколько пользователей:

from user.models import User

class Project(models.Model):

    project_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256, unique=True, blank=False)
    created = models.DateTimeField(auto_now_add=True)
    description = models.TextField(max_length=10000, default="")
    slug = models.SlugField(max_length=256, unique=True)
    created_by = CurrentUserField(related_name='creator')
    users = models.ManyToManyField(User, related_name='users')
    ....

Моя модель UserAdmin выглядит следующим образом:

class CustomUserAdmin(UserAdmin):
    list_display = ("email", "is_staff", "is_superuser")
    readonly_fields = ("last_login", "date_joined", "uuid")
    ordering = ("email",)
    fieldsets = (
        (
            "Fields",
            {
                "fields": (
                    "email",
                    "uuid",
                    "date_joined",
                    "last_login",
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                    "password",
                )
            },
        ),
    )


admin.site.register(User, CustomUserAdmin)

Однако, когда я перехожу в вид администратора к экземпляру проекта и пытаюсь добавить пользователя, я получаю:

FieldError at /admin/user/user/add/ Неизвестное поле (поля) (имя пользователя) указано для User. Проверьте поля/наборы полей/исключите атрибуты класса CustomUserAdmin. Метод запроса: GET URL запроса: http://localhost:8000/admin/user/user/add/?_to_field=id&_popup=1 Версия Django: 3.2.11 Тип исключения: FieldError Значение исключения:
Неизвестное поле (поля) (имя пользователя) указано для User. Проверьте поля/наборы полей/исключающие атрибуты класса CustomUserAdmin.

Я добавил свою модель пользователя как модель по умолчанию в настройках, поэтому я не знаю, откуда здесь берется поле username.

Поле username все еще является частью search_fields и add_fieldsets. Таким образом, вы должны удалить поле username там:

class CustomUserAdmin(UserAdmin):
    list_display = ('email', 'is_staff', 'is_superuser')
    readonly_fields = ('last_login', 'date_joined', 'uuid')
    ordering = ('email',)
    search_fields = ('first_name', 'last_name', 'email')  # 🖘 no username
    fieldsets = (
        (
            'Fields',
            {
                'fields': (
                    'email',
                    'uuid',
                    'date_joined',
                    'last_login',
                    'is_active',
                    'is_staff',
                    'is_superuser',
                    'groups',
                    'user_permissions',
                    'password',
                )
            },
        ),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2'),
            #              🖞 without username
        }),
    )


admin.site.register(User, CustomUserAdmin)
Вернуться на верх