我在Django模型中的邮箱字段有问题.我已将其设置为空True和空True,但这不能阻止管理员用户表单或任何其他包含邮箱的Web表单,如果汇总为空,则不需要邮箱.它似乎与我的自定义用户模型中的被覆盖的邮箱字段相关,但我是Django的新手,所以我不知道应该注意哪里进行故障排除.
这是我的自定义用户模型及其经理.
`From django.contri.auth.delams导入AbstractUser 从django.db导入模型 从django.utils.ting将gettext_lazy导入为_
从.Manager导入UserManager
类User(AbstractUser):
GENDER_CHOICES = (
('male', _('Male')),
('female', _('Female')),
('not_set', _('Not set')),
)
email = models.CharField(_('Email'), max_length=30, unique=True, blank=True, null=True)
phone = models.PositiveBigIntegerField(_('Phone number'), unique=True, null=True, blank=True)
telegram = models.BigIntegerField(_('Telegram ID'), unique=True, null=True, blank=True)
first_name = models.CharField(_('First name'), max_length=50, blank=True, null=True )
last_name = models.CharField(_('Last name'), max_length=50, blank=True, null=True )
middle_name = models.CharField(_('Middle name'), max_length=50, blank=True, null=True )
gender = models.CharField(_('Gender'), max_length=7, choices=GENDER_CHOICES, default='not_set')
profile_image = models.ImageField(_("Profile image"), upload_to='user/img/profile/', blank=True, null=True)
cover_image = models.ImageField(_("Cover image"), upload_to='user/img/cover/', blank=True, null=True)
user_verified_at = models.DateTimeField(_('User verified at'), null=True, blank=True)
phone_verified_at = models.DateTimeField(_('Phone verified at'), null=True, blank=True)
telegram_linked_at = models.DateTimeField(_('Telegram linked at'), null=True, blank=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = []
objects = UserManager()
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")
def str(self):
return str(self.username)
类保留用户名(Models.Model): 用户名=Models.Charfield(max_long=30,Unique=True)
def str(self):
return self.username
class Meta:
verbose_name = _("Reserved Username")
verbose_name_plural = _("Reserved Usernames")`
Managers.py ` 从django.contri.auth.base_user导入BaseUserManager
类UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, username, password, **extra_fields):
if not username:
raise ValueError('Username is required')
user = self.model(username=username, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
extra_fields.setdefault('is_active', True)
return self._create_user(username, password, **extra_fields)
def create_superuser(self, username, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must be a staff')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must be a superuser')
return self._create_user(username, password, **extra_fields)`
还有一件事...如果您能帮上忙,我需要让Managers.py更有效率.我最近注意到对用户名长度的任何验证,我在那里配置的char regexp在项目中的任何地方都不起作用.
感谢您提前给任何人答复.
我try 将邮箱字段设置为空=True,空=True