我在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

推荐答案

Problem :-

我认为这是因为Unique=True. 所以两个人不能放一封空白的邮箱,这是因为两个值都是相等的(‘’=‘’).

就像,它变成了

empty = empty.

Answers :-

我会说,

1) 若要删除unique=True,请使用数据库约束来保持唯一性并允许空值. 如果你真的想用CharField来解决这个问题.

2) 使用EmailField,删除unique=True.哪一个更方便、更合适、更which is build for this.


并确保删除旧的数据库迁移,并运行makemigations和Migrate.

谢谢.

Django相关问答推荐

Django、htmx删除记录并更新

Django BooleanField如何使用RadioSelect?

未显示SWAGER上的一些示例架构

Django 5.0.2:TypeError:获取切片后无法过滤查询

从Azure Web应用服务器上的cron任务的虚拟环境加载变量

如何在Django中显示文件大小

如何在uwsgi中创建单个日志(log)文件?

如何在Django REST框架中实现ForeignKey搜索

如何在不编写每个视图中的逻辑的情况下呈现值,Django?

PyCharm:强制 Django 模板语法突出显示

Django 密码以什么格式存储在数据库中?

一个简单的Django和CSS示例

Django Admin - 覆盖自定义表单字段的小部件

Django App 配置不当 - 应用程序模块有多个文件系统位置

Django BigInteger自动增量字段作为主键?

重命名 django 元素的简单方法

始终将用户包含在 django 模板上下文中

如何将 ManyToManyField 呈现为复选框?

Django unique_together 与可为空的 ForeignKey

Django:必须使用对象 pk 或 slug 调用通用详细视图