Пользователь, созданный в панели администратора, не может войти в панель администратора
У меня есть пользовательская модель пользователя:
class CustomUser(AbstractUser):
ACCESS_LEVELS = (
('user', 'Авторизованный пользователь'),
('admin', 'Администратор')
)
email = models.EmailField(
max_length=254,
unique=True,
verbose_name='Эл. почта'
)
access_level = models.CharField(
max_length=150,
choices=ACCESS_LEVELS,
blank=True,
default='user',
verbose_name='Уровень доступа',
)
@property
def is_admin(self):
return self.is_superuser or self.access_level == 'admin'
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
def __str__(self):
return (
f'email: {self.email}, '
f'access_level: {self.access_level}'
)
Зарегистрировался в панели администратора:
@admin.register(CustomUser)
class UserAdmin(admin.ModelAdmin):
list_display = ('username', 'email', 'access_level')
search_fields = ('email', 'access_level')
list_filter = ('email',)
def save_model(self, request, obj, form, change):
if obj.is_admin:
obj.is_staff = True
obj.save()
Когда я создаю суперпользователя или пользователя со статусом сотрудника и пытаюсь войти в систему, появляется сообщение:
Please enter the correct username and password for a staff account. Note that both fields may be case-sensitive.
Поэтому я погуглил эту проблему и попробовал все, что мог. Вот все проблемы, которые я исследовал:
База данных не синхронизирована: Я синхронизировал ее и ничего не изменилось.
Нет таблицы django_session: Я проверил, она есть.
Проблемные настройки: Я просто добавил созданные приложения в INSTALLED_APPS.
Пользователь настроен неправильно: is_staff, is_superuser и is_active все True.
Старые сессии: Я проверил таблицу django_session и она пуста.
Отсутствие или неправильный шаблон URL: Сейчас у меня есть url('admin/', admin.site.urls) в mysite/urls.py.
Неправильная команда сервера: Я использую python manage.py runserver.
Что-то не так с базой данных: Я попробовал удалить базу данных, а затем снова применить миграции, но ничего не изменилось.
Используйте UserAdmin
[Django-GitHub] для регистрации UserModel. Она обеспечит функциональность для хэширования пароля, когда вы вводите пароль в панели администратора, так:
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
pass
admin.site.register(CustomUser, CustomUserAdmin)