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],
)