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(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_cleanclean时才调用验证器,只有在执行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],
)

最新更新