Regex Django字段正则表达式验证
我试图创建一个模型来存储标签 验证器似乎不工作,使字段接受所有输入,我找不到解决方案 这是我的模型:Regex Django字段正则表达式验证,regex,django,Regex,Django,我试图创建一个模型来存储标签 验证器似乎不工作,使字段接受所有输入,我找不到解决方案 这是我的模型: class Hashtags(models.Model): hashtag_validator = RegexValidator(r'^[#](\w+)$', "Hashtag doesn't comply.") hashtag_id = models.AutoField(primary_key=True) hashtag_text = models.CharField(
class Hashtags(models.Model):
hashtag_validator = RegexValidator(r'^[#](\w+)$', "Hashtag doesn't comply.")
hashtag_id = models.AutoField(primary_key=True)
hashtag_text = models.CharField(max_length=100, validators=[hashtag_validator], unique=True)
def get_id(self):
return self.hashtag_id
def get_text(self):
return self.hashtag_text
您可以将其更改为下面给定的代码,以查看其工作情况
hashtag_validator = CharField(
max_length=50,
required=True, #if you want that field to be mandatory
validators=[
RegexValidator(
regex='^[#](\w+)$',
message='Hashtag doesnt comply',
),
]
)
希望有帮助
如果这是导致问题的原因,您可以尝试编写自己的验证器
from django.core.exceptions import ValidationError
import re
def validate_hash(value):
reg = re.compile('^[#](\w+)$')
if not reg.match(value) :
raise ValidationError(u'%s hashtag doesnot comply' % value)
并将模型字段更改为
hashtag_validator = models.Charfield(validators=[validate_hash])
除了S.阿里的回答: 基于
很晚才来参加聚会,所以我怀疑这对OP来说仍然是个问题,但我将把这篇文章留给子孙后代和碰巧遇到这篇文章的人。可能您正在直接实例化和保存对象,例如
Hashtags(hashtag\u text='invalid-tag')。save()
。只有在调用full\u clean
或clean
时才会调用验证器,只有通过ModelForm
时才会自动执行。如果通过构造函数或对象集合Hashtags.objects.create
手动实例化对象,将不会调用验证程序。仍然不工作,不确定发生了什么。我把标签改成了你发布的内容。我的测试是创建一个hashtag并将其保存到数据库中。
def uncvalidator(value):
"""Custom UNC path validator"""
import re
from django.utils.translation import gettext_lazy as _
UNC_REGEX = r'^local.company/some/share'
regex = re.compile(UNC_REGEX, re.IGNORECASE)
if not regex.match(value):
raise ValidationError(
_('Entered path %(value)s is incorrect.'),
params={'value': value},
)
unc = models.CharField(
validators=[uncvalidator],
)