Я создал пользовательскую модель пользователя и хочу, чтобы адрес электронной почты и имя пользователя были уникальным полем. И я использую электронную почту в качестве основного поля имени пользователя. Оба уникальны. Проблема в том, что когда я создаю «createuperuser», я получаю мгновенную ошибку, если электронное письмо уже кем-то занято, но в случае поля имени пользователя оно проверяет уникальное условие в конце, которое выдает уродливую ошибку несоответствия уникального ограничения Postgres. Я хочу, чтобы поле имени пользователя было мгновенно проверено, как поле электронной почты.
Проверьте изображения ниже.
models.py
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
class UserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
"""Create and save a User with the given email and password."""
if not email:
raise ValueError('The given email 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_user(self, email, password=None, **extra_fields):
"""Create and save a regular User with the given email and password."""
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
"""Create and save a SuperUser with the given email and password."""
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 User(AbstractUser):
"""User model."""
username = models.CharField(max_length=255, unique=True, null=False)
full_name = models.CharField(max_length=255, null=True)
email = models.EmailField(_('email address'), unique=True)
confirm = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'full_name']
objects = UserManager()
def __str__(self):
return self.email
Это то, что я хочу image
Это то, что я получаю изображение