gpt4 book ai didi

python - AttributeError : module 'django.db.models' has no attribute 'RegexField' . python (django)

转载 作者:行者123 更新时间:2023-12-04 10:03:59 29 4
gpt4 key购买 nike

我想添加 RegexField 但我有这个错误。为什么?
在 Google 上找到它,但在 regexfield 上没有

这是错误

mob = models.RegexField(regex=r'^+?1?\d{9,15}$')
AttributeError: 模块 'django.db.models' 没有属性 'RegexField'


模型.py

from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django import forms


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 = None
email = models.EmailField(_('email address'), unique=True)
mob = models.RegexField(regex=r'^\+?1?\d{9,15}$')


USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = UserManager()

最佳答案

一个 RegexField [Django-doc]是一个表单域。您可以在表单中使用它来验证文本,然后再将其存储在模型中,但不能存储在模型中。

您可以添加一个 RegexValidator [Django-doc]作为模型字段的验证器:

from django.core.validators import RegexValidator

class User(AbstractUser):
"""User model."""

username = None
email = models.EmailField(_('email address'), unique=True)
mob = models.CharField(
max_length=17,
validators=[RegexValidator(r'^\+?1?\d{9,15}$')]
)


USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = UserManager()

截至 您也可以使用 constraint framework [Django-doc]在数据库层验证约束。并非所有数据库本身都检查约束,因此不能保证在数据库层对其进行验证。您可以使用以下方式定义约束:
from django.db.models import Q
from django.core.validators import RegexValidator

class User(AbstractUser):
"""User model."""

username = None
email = models.EmailField(_('email address'), unique=True)
mob = models.CharField(
max_length=17,
validators=[RegexValidator(r'^\+?1?\d{9,15}$')]
)


USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = UserManager()

class Meta:
constraints = [
models.CheckConstraint(
check=Q(mob__regex=r'^\+?1?\d{9,15}$'),
name='mob_valid'
),
]

您还可以使用 RegexField 定义表单,尽管如果您添加了不必要的验证器。例如,您可以在表单中添加:
from django import forms

class UserForm(forms.ModelForm):
mob = forms.RegexField(regex=r'^\+?1?\d{9,15}$')

class Meta:
model = User
fields = '__all__'

关于python - AttributeError : module 'django.db.models' has no attribute 'RegexField' . python (django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61682995/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com