Я пытался создать модель CustomUser, которая наследуется от AbstractBaseUser в drf, но когда я пытаюсь создать нового суперпользователя для входа на сайт администратора, это не работает. он показывает, что суперпользователь создан успешно, но при запуске оболочки Manage.py и попытке получить именно того пользователя, которого я только что создал, он, очевидно, не существует.
моя пользовательская модель пользователя:
from django.contrib.auth.models import BaseUserManager
from typing import Any
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as lz
class UserManager(BaseUserManager):
def email_validator(self, email):
try:
validate_email(email)
except ValidationError:
raise ValueError(lz("enter a valid email address"))
def create_user(self, email, username, password, **extra_fields):
if email:
email = self.normalize_email(email)
self.email_validator(email)
else:
raise ValidationError(lz("an email address is required"))
if not username:
raise ValidationError(lz("a username is required"))
user = self.model(self, email, username, password, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password, **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(lz("is staff must be true for admin user"))
if extra_fields.get("is_superuser") is not True:
raise ValueError(lz("is superuser must be true for admin user"))
user = self.create_user(email, username, password, **extra_fields)
user.save(using=self._db)
return user
просмотрел все ресурсы, которые видел в документации drf, решения по-прежнему нет.
по умолчанию для is_staff и is_superuser установлено значение true, но его все равно не удается найти, вернее, не создан...
Я пытался создать модель CustomUser, которая наследуется от AbstractBaseUser в drf, но когда я пытаюсь создать нового суперпользователя для входа на сайт администратора, это не работает. он показывает, что суперпользователь создан успешно, но при запуске оболочки Manage.py и попытке получить именно того пользователя, которого я только что создал, он, очевидно, не существует. моя пользовательская модель пользователя: [code]from django.db import models from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, Group, Permission from .managers import UserManager from django.utils.translation import gettext_lazy as lz
groups = models.ManyToManyField( Group, related_name='accounts_user_groups', blank=True, help_text="the groups this user belongs to", verbose_name=lz('groups') )
user_permissions = models.ManyToManyField( Permission, related_name='accounts_user_permissions', blank=True, help_text="permissions for this user", verbose_name=lz('user permissions') )
def save(self, *args, **kwargs): if not self.id: # Generate a shorter base64-encoded UUID hex_string = uuid.uuid4().hex bytes_data = bytes.fromhex(hex_string) data = base64.urlsafe_b64encode(bytes_data).decode('ascii')[:12] self.id = data.replace("-","").replace("_", "")
super().save(*args, **kwargs) [/code] мой файл менеджеров.py [code]from django.contrib.auth.models import BaseUserManager from typing import Any from django.core.validators import validate_email from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as lz
class UserManager(BaseUserManager): def email_validator(self, email): try: validate_email(email) except ValidationError: raise ValueError(lz("enter a valid email address"))
def create_user(self, email, username, password, **extra_fields): if email: email = self.normalize_email(email) self.email_validator(email) else: raise ValidationError(lz("an email address is required"))
if not username: raise ValidationError(lz("a username is required"))
user = self.model(self, email, username, password, **extra_fields) user.set_password(password) user.save(using=self._db) return user
if extra_fields.get("is_staff") is not True: raise ValueError(lz("is staff must be true for admin user")) if extra_fields.get("is_superuser") is not True: raise ValueError(lz("is superuser must be true for admin user"))
user = self.create_user(email, username, password, **extra_fields) user.save(using=self._db) return user [/code] просмотрел все ресурсы, которые видел в документации drf, решения по-прежнему нет. по умолчанию для is_staff и is_superuser установлено значение true, но его все равно не удается найти, вернее, не создан...