我正在尝试创建一个模型来存储一个标签。
验证器似乎不工作,使字段接受所有输入,我找不到解决方案。
这是我的模型: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])
太晚了,所以我怀疑这对OP来说仍然是一个问题,但我将把它留在这里,只是为了子孙后代和碰巧看到这篇文章的人。可能您正在实例化并直接保存对象,例如Hashtags(hashtag_text='invalid-tag').save()
。这将不会调用验证器。只有在调用full_clean
或clean
时才调用验证器,只有在执行ModelForm
时才自动执行验证器。如果您手动实例化对象,无论是通过构造函数还是对象集合Hashtags.objects.create
,验证器都不会被调用。
除了S.Ali回答:
基于这里的例子
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],
)