Как правильно расширить пользовательскую модель Django auth по умолчанию?
Я создал модель CustomUser, которая расширяет пользователя django Abstract, теперь каждый пользователь, которого я создаю, не может войти ни в панель администратора, ни на страницу входа в приложение
Я даже пытался создать модель Profile, которая обращается к модели пользователя auth в качестве внешнего ключа, но это очень утомительно и требует большого количества запросов
Похоже, вы хотите создать модель CustomUser, чтобы расширить ее атрибуты и добавить больше функциональности. Вот исправленная версия кода для создания пользовательского пользователя, а также код для создания нового пользователя или суперпользователя.
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('The Email field 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_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', 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)
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
Мы используем CustomUserManager для создания пользователей и суперпользователей. Ниже приведен исправленный ORM-запрос для создания пользователя:
from accounts.models import CustomUser
# Create a regular user
user = CustomUser.objects.create_user(
email='user@example.com',
password='userpassword',
first_name='John',
last_name='Doe'
)
Использование CustomUserManager для создания суперпользователя
from accounts.models import CustomUser
# Create a superuser
superuser = CustomUser.objects.create_superuser(
email='admin@example.com',
password='adminpassword',
first_name='Admin',
last_name='User'
)