Невозможно войти в систему после изменения базовой модели пользователя на пользовательскую
Недавно я изменил свою модель пользователя на пользовательскую и больше не могу войти как в админку (с суперпользователями), так и на сайт (с обычными пользователями). Для аутентификации я использую поле email
. Наверное, я чего-то не учел, но поскольку ошибок нет, я не знаю, где искать.
Примечание: Когда я пытаюсь войти в систему (администратор или сайт), форма входа просто обновляется с пустыми вводами, поэтому я предполагаю, что форма is not valid
? Если да, то почему?
# models.py
from django.core.mail import send_mail
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import BaseUserManager
class UserProfileManager(BaseUserManager):
""" Manager for user profiles """
def create_user(self, email, name, password=None):
""" Create a new user profile """
if not email:
raise ValueError('User must have an email address')
email = self.normalize_email(email)
user = self.model(email=email, name=name)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, name, password):
""" Create a new superuser profile """
user = self.create_user(email, name, password)
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
class UserProfile(AbstractBaseUser, PermissionsMixin):
""" Database model for users in the system """
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
email_confirmed = models.BooleanField(default=False)
objects = UserProfileManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
def email_user(self, subject, message, from_email=None, **kwargs):
"""Copied from original class"""
send_mail(subject, message, from_email, [self.email], **kwargs)
def __str__(self):
return self.email
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
instance.userprofile.save()
# forms.py
class UserLoginForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super(UserLoginForm, self).__init__(*args, **kwargs)
email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={
'class': tailwind_class
}))
password = forms.CharField(widget=forms.PasswordInput(
attrs={'class': tailwind_class}))
# urls.py
path('login/', views.LoginView.as_view(template_name='user/login.html', authentication_form=UserLoginForm), name="login"),