我有一个如下模型:
class Page(ContentBase):
url_slug = models.SlugField()
根据SlugField文档,slugfields是'数字,字母,下划线和连字符'。但是,我似乎能够设置具有该规范之外的字符的坏块:
page = Page.objects.get(id=872)
page.url_slug = '&*()&*(*(Y*'
page.save()
In [26]: page.url_slug
Out[26]: '&*()&*(*(Y*'
这是为什么? SlugFields是否应该根据文档验证其输入,还是我自己需要这样做?当我似乎能够如此轻易地避免它时,为什么文档说明了限制?
答案 0 :(得分:2)
SlugField的验证通过匹配forms.SlugField来完成:
class SlugField(CharField):
default_error_messages = {
'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers,"
u" underscores or hyphens."),
}
default_validators = [validators.validate_slug]
如果您在没有表单的情况下手动修改它,请参阅django.core.validators.validate_slug:
slug_re = re.compile(r'^[-\w]+$')
validate_slug = RegexValidator(slug_re, _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."), 'invalid')