Django FieldError: Указано неизвестное поле (usable_password)

Я сталкиваюсь с этой FieldError при попытке добавить пользователя в Users в панели администратора. Когда я нажимаю на кнопку добавления пользователя, выскакивает эта ошибка. Я нигде не использовал usable_password в своем коде и пытался решить эту проблему несколькими способами: удалял db.sqlite3, делал миграцию, а затем заново делал makemirations. Еще одна вещь - я изменил написание класса в models.py (после выполнения миграций, а затем снова выполнил миграцию, и она успешно создала файл миграции). Я хочу понять, почему это происходит, и еще одна вещь - я столкнулся с подобной ошибкой некоторое время назад в другом проекте и не знаю, как она была решена в тот раз. FieldError at /admin/accounts/customuser/add/ Unknown field(s) (usable_password) specified for CustomUser. Check fields/fieldsets/exclude attributes of class CustomUserAdmin. Request Method: GET Request URL: http://127.0.0.1:8000/admin/accounts/customuser/add/ Django Version: 5.1.4 Exception Type: FieldError Exception Value: Unknown field(s) (usable_password) specified for CustomUser. Check fields/fieldsets/exclude attributes of class CustomUserAdmin. Exception Location: C:\Users\Learning Django\blog-api\.venv\Lib\site-packages\django\contrib\admin\options.py, line 841, in get_form Raised during: django.contrib.auth.admin.add_view Python Executable: C:\Users\Learning Django\blog-api\.venv\Scripts\python.exe Python Version: 3.12.2 Python Path: ['C:\\Users\\Desktop\\Learning ' 'Django\\blog-api\\django_project', 'C:\\Python312\\python312.zip', 'C:\\Python312\\DLLs', 'C:\\Python312\\Lib', 'C:\\Python312', 'C:\\Users\\Learning ' 'Django\\blog-api\\.venv', 'C:\\Users\\Learning ' 'Django\\blog-api\\.venv\\Lib\\site-packages']

Ниже я прилагаю код models.py, forms.py и admin.py: models.py

from django.db import models

# Create your models here.
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    name = models.CharField(null = True, blank = True, max_length = 255)
    

forms.py

from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser


class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ('name',)
        
class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = CustomUser
        fields = UserChangeForm.Meta.fields

admin.py

from django.contrib import admin

# Register your models here.
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    change = CustomUserChangeForm
    model = CustomUser
    list_display = [
        "email",
        "username",
        "name",
        "is_staff",
    ]
    fieldsets = UserAdmin.fieldsets + ((None, {"fields": ("name",)}),)
    add_fieldsets = UserAdmin.add_fieldsets + ((None, {"fields": ("name",)}),)
admin.site.register(CustomUser, CustomUserAdmin)

Django использует AdminUserCreationForm и AdminPasswordChangeForm для add_form и change_password_form соответственно.

Эти формы позволяют установить пароль в непригодное для использования состояние. Это делается, например, для того, чтобы пользователь не мог войти в систему с помощью пароля (но, например, с помощью OTP или другим способом).

Таким образом, вы можете смешивать в этой форме для UserAdmin:

from django.contrib.auth.forms import AdminUserCreationForm


class CustomUserCreationForm(AdminUserCreationForm):
    class Meta(UserCreationForm):
        model = CustomUser
        fields = AdminUserCreationForm.Meta.fields + ('name',)
Вернуться на верх