Ошибка администратора Django "Пожалуйста, исправьте ошибки ниже."
Я создал пользовательский BaseUserManager для создания пользователя, но я получаю сообщение об ошибке "Пожалуйста, исправьте ошибки ниже", когда я добавляю пользователя из админ-панели django, и я не могу найти, что происходит не так.
Models.py:
class UserManager(BaseUserManager):
def create_user(self,email,password):
user = self.model(email=email)
user.set_password(password)
def create_superuser(self,email,password):
user = self.model(email=email)
user.set_password(password)
user.is_admin = True
user.is_superuser = True
user.is_staff=True
user.save(using=self._db)
class User(AbstractBaseUser,PermissionsMixin):
COMPANY='CO'
EMPLOYEE='EM'
STATUS_CHOICES=(
(COMPANY,'Company'),
(EMPLOYEE,'Employee'),
)
Status=models.CharField(max_length=2,
choices=STATUS_CHOICES,
default=EMPLOYEE)
user_image = models.CharField(max_length=100)
is_admin=models.BooleanField()
email=models.EmailField(unique=True)
is_staff=models.BooleanField(default=False)
object = UserManager()
USERNAME_FIELD='email'
REQUIRED_FIELDS = []
objects=models.Manager()
def get_short_name(self):
return self.email
Файлы Admin.py:
class UserAdmin(UserAdmin):
list_display = ('email', 'is_admin')
list_filter = ('is_admin',)
fieldsets = (
(None, {'fields': ('email', 'password','Status','user_image','last_login')}),
('Permissions', {'fields': ('is_admin','is_staff','is_superuser','user_permissions','groups')}),
)
add_fieldsets= (
(None, {'fields': ('email', 'password','Status','user_image','last_login')}),
('Permissions', {'fields': ('is_admin','is_staff','is_superuser','user_permissions','groups')}),
)
search_fields = ('password',)
ordering = ('password',)
filter_horizontal = ()
admin.site.register(User,UserAdmin)
admin.site.register(Company)
admin.site.register(Employee)
admin.site.register(Job)
admin.site.register(AppliedJobs)
Может кто-нибудь подсказать, что я делаю не так? Я всегда получаю сообщение об ошибке, когда добавляю пользователя из админ-панели. Не могу понять, как я впервые работаю над baseusermanager.
3 ответа
Была такая же проблема, и ответ довольно прост.
проблема в твоем
add_fieldsets
. Джанго использует собственный шаблон для добавления новых пользователей (вы можете проверить его в
UserAdmin
модель в
django.contrib.auth.admin.py
файл). Вам необходимо определить поля для и .
Для вашего удобства я вставлю его туда:
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2'),
}),
)
Тут у вас 2 варианта:
PS в любом случае нужно определить
username
,
password1
а также
password2
поля.
- Используйте поле суперкласса и добавьте свой собственный:
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {'fields': ('email', 'Status', 'user_image', 'last_login')}),
('Permissions', {'fields': ('is_admin', 'is_staff', 'is_superuser', 'user_permissions', 'groups')}),
)
- Определите сами:
add_fieldsets = (
(None, {'fields': ('username', 'email', 'password1', 'password2', 'Status', 'user_image', 'last_login')}),
('Permissions', {'fields': ('is_admin', 'is_staff', 'is_superuser', 'user_permissions', 'groups')}),
)
Это может помочь вам.
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
"""
Create and save a user with the given email, and password.
"""
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email=None, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
extra_fields.setdefault('is_admin', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_admin', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
Методы в вашей версии Manager ничего не возвращают, но они должны.
Могу подсказать, как попытаться найти проблему. Обычно ваш
UserAdmin
будет ссылаться на формы, см. ниже:
class UserAdmin(UserAdmin):
add_form = SignUpForm
form = CustomUserChangeForm
Вы можете узнать, что вызывает ошибки, используя ведение журнала. Добавьте следующий миксин в свой
SignUpForm
и
CustomUserChangeForm
:
import logging
logger = logging.getLogger(__name__)
# see https://stackru.com/questions/20833638/how-to-log-all-django-form-validation-errors
class LoggingMixin(object):
def add_error(self, field, error):
if field:
logger.info('Form error on field %s: %s', field, error)
else:
logger.info('Form error: %s', error)
super().add_error(field, error)
# e.g.
class SignUpForm(LoggingMixin, UserCreationForm):
....
Теперь либо войдите в систему, либо смените пользователя и проверьте журналы, чтобы выяснить, что вызывает сообщение "Исправьте указанные ниже ошибки".