Ошибка Django "Пожалуйста, исправьте ошибку ниже"
Пожалуйста, помогите мне, так как я уже просмотрел большинство представленных здесь сообщений и все еще не могу найти решение. Я создал пользовательскую модель пользователя и менеджера в Django. Также создал форму изменения и форму создания. Я могу создать пользователя с помощью оболочки manage.py, но когда я пытаюсь создать пользователя с помощью интерфейса администратора Django, я получаю ошибку "Please correct the error below", но эта ошибка не предоставляет никакой информации об ошибке. Есть много вопросов, которые она задавала по этому поводу, но ни один из них не смог решить мою проблему.
Вот мой менеджер пользователей
class UserManager(BaseUserManager):
def create_user(self, email, first_name, last_name,contact_no, password=None,is_staff=False, is_admin=False, is_active=True):
if not email:
raise ValueError('Users must have an email address')
if not password:
raise ValueError('Users must have a password')
if not first_name:
raise ValueError('Users must have a First Name')
if not last_name:
raise ValueError('Users must have a Last Name')
if not contact_no:
raise ValueError('Users must have a Contact No')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.first_name = first_name
user.last_name = last_name
user.contact_no = contact_no
user.active = is_active
user.staff = is_staff
user.admin = is_admin
user.save(using=self._db)
return user
def create_staffuser(self, email, first_name, last_name,contact_no,password=None, is_active=True, is_staff=True, is_admin=False):
user = self.create_user(
email,
password=password,
first_name=first_name,
last_name = last_name,
contact_no=contact_no,
is_active=is_active,
is_admin= is_admin
)
user.staff = True
user.save(using=self._db)
return user
def create_superuser(self, email, first_name, last_name,contact_no, password=None,is_active=True, is_staff=True, is_admin=True):
user = self.create_user(
email,
password=password,
first_name=first_name,
last_name = last_name,
contact_no=contact_no,
is_active=is_active,
)
user.staff = True
user.admin = True
user.save(using=self._db)
return user
Ниже приведена моя модель пользователя
class User(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
first_name = models.CharField(max_length=25)
last_name = models.CharField(max_length=25)
contact_no = models.CharField(max_length=10)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name','contact_no']
def get_full_name(self):
return f'{self.first_name} {self.last_name}'
def get_short_name(self):
return f'{self.email}'
def __str__(self):
return f'{self.first_name} {self.last_name} | {self.email}'
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.staff
@property
def is_admin(self):
return self.admin
objects = UserManager()
Форма создания пользователя
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('email', 'first_name', 'last_name','contact_no','active')
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
Форма смены пользователя
class UserChangeForm(forms.ModelForm):
"""A form for updating users. Includes all the fields on
the user, but replaces the password field with admin's
disabled password hash display field.
"""
password = ReadOnlyPasswordHashField()
class Meta:
model = User
fields = ('email', 'password', 'first_name', 'last_name','contact_no',)
User Admin Clas
class UserAdmin(BaseUserAdmin):
form = UserChangeForm
add_form = UserCreationForm
list_display = ('email', 'first_name', 'last_name','contact_no',)
list_filter = ('first_name','last_name')
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Personal info', {'fields': ('first_name', 'last_name','contact_no',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'first_name', 'last_name','contact_no','password', 'password2',),
}),
)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal = ()
Тогда я зарегистрировал User и UserAdmin
admin.site.register(User,UserAdmin)
admin.site.unregister(Group)
