Настройка модели CustomUser в структуре отдыха djangoPython

Программы на Python
Ответить
Anonymous
 Настройка модели CustomUser в структуре отдыха django

Сообщение Anonymous »

Я пытался создать модель CustomUser, которая наследуется от AbstractBaseUser в drf, но когда я пытаюсь создать нового суперпользователя для входа на сайт администратора, это не работает. он показывает, что суперпользователь создан успешно, но при запуске оболочки Manage.py и попытке получить именно того пользователя, которого я только что создал, он, очевидно, не существует.
моя пользовательская модель пользователя:

Код: Выделить всё

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

import uuid
import base64

ITEM = (
("pastries", 'pastries'),
("rentals",'rentals'),
("music", 'music'),
("help", 'help')
)
class CustomUser(AbstractBaseUser, PermissionsMixin):
objects = UserManager()
id = models.CharField(max_length=12, unique=True, primary_key=True, editable=False)
username = models.CharField(max_length=55, unique=True)
email = models.EmailField(verbose_name=lz('email address'), unique=True, max_length=255)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
last_login = models.DateTimeField(null=True, blank=True)
is_verified = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)

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')
)

USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username"]

def __str__(self) ->  str:
return self.email

@property
def get_full_name(self):
return f'{self.first_name} {self.last_name}'

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)
мой файл менеджеров.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, но его все равно не удается найти, вернее, не создан...

Подробнее здесь: https://stackoverflow.com/questions/791 ... -framework
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»