A RegexField
[Django -doc] - это поле формы . Вы можете использовать его в форме для проверки текста перед тем, как, например, сохранить его в модели, но не в модели .
Что вы можете сделать, так это добавить a RegexValidator
[Django -doc] в качестве валидатора для поля вашей модели:
from django.core.validators import <b>RegexValidator</b>
class User(AbstractUser):
"""User model."""
username = None
email = models.EmailField(_('email address'), unique=True)
mob = models.CharField(
max_length=17,
<b>validators=[RegexValidator(r'^\+?1?\d{9,15}$')]</b>
)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
Начиная с django -2,2 вы также можете использовать структуру ограничений [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:
<b>constraints</b> = [
models.CheckConstraint(
check=Q(mob__regex=r'^\+?1?\d{9,15}$'),
name='mob_valid'
),
]
Вы также можете определить форму с помощью RegexField
, хотя, если вы добавите валидатор, в этом нет необходимости. Например, в форме можно добавить:
from django import forms
class UserForm(forms.ModelForm):
mob = <b>forms.RegexField(</b>regex=r'^\+?1?\d{9,15}$'<b>)</b>
class Meta:
model = User
fields = '__all__'