Форум сайта python.su
Здравствуйте! Не гневитесь если этот вопрос где то подымался, честное слово искал, смотрел не нашел. Прошу помощи у знатоков. Собственно к сути вопроса. С Django я не так давно, но стараюсь развиваться очень интересно. Пишу проект и стандартная модель User не устраивает вообше. Погуглил почитал остановился на методе с переопределением модели на свою.
Пример моей модели.
from django.contrib.auth.base_user import BaseUserManager from django.core.mail import send_mail from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth.models import PermissionsMixin from django.contrib.auth.validators import UnicodeUsernameValidator from django.db import models from uuid import uuid4 from datetime import datetime from django.contrib.auth.hashers import make_password
class UserManager(BaseUserManager): use_in_migrations = True
def _create_user(self, email, full_name, password, **extra_fields):
“”“
Create and save a user with the given email,
full_name, and password.
”“”
if not email:
raise ValueError('email должен быть указан')
if not full_name:
raise ValueError('ФИО должно быть указанно')
email = self.normalize_email(email)
user = self.model(
email=email, full_name=full_name,
**extra_fields
)
user.set_password(make_password(password))
user.save(using=self._db)
return user
def create_user(self, email, full_name, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(
email, full_name, password, **extra_fields
)
def create_superuser(self, email, full_name, password, **extra_fields):
extra_fields.setdefault('dob', datetime.now())
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, full_name, password, **extra_fields
)
class User(AbstractBaseUser, PermissionsMixin): username_validator = UnicodeUsernameValidator()
email = models.EmailField(
unique=True,
blank=False,
null=False,
verbose_name='E-Mail сотрудника'
)
full_name = models.CharField(
max_length=255,
null=False,
blank=False,
verbose_name='ФИО сотрудника'
)
dob = models.DateField(
null=False,
blank=False,
verbose_name='Датв рождения сотрудника'
)
emp_uid = models.UUIDField(
unique=True,
default=uuid4,
verbose_name='Уникальный индекс пользователя'
)
password = models.CharField(
max_length=150,
blank=False,
null=False,
verbose_name='Пароль'
)
is_active = models.BooleanField(
default=True,
verbose_name='Сотрудник активен'
)
is_staff = models.BooleanField(
default=False,
verbose_name='Наличие привилегий'
)
USERNAME_FIELD = ‘email’
REQUIRED_FIELDS =
objects = UserManager()
def __str__(self):
return self.email
def get_short_name(self):
return self.email
def get_full_name(self):
return self.full_name
def email_user(self, subject, message, from_email=None, **kwargs):
send_mail(subject, message, from_email, , **kwargs)
class Meta:
verbose_name = ‘Сотрудник’
verbose_name_plural = ‘Сотрудники’
Все бы ничего, но нарушилась работа админки. Мне показывается просто страниц с предложением заполнить поля. И все не так при вводе пользователя как на чистом проекте. Пароль остается текстом, назначение прав не работает. Что делать? Как поправить? Где почитать? Или все так и должно работать и после смены модели все тяготы ложатся на программиста? Спасибо за помощь, буду благодарен!
https://ibb.co/hvk3s9 - админка теперь
Прикреплённый файлы:
adminka.png (44,9 KБ)
Офлайн