Django slugfield «цифры, буквы, подчеркивания и дефисы», похоже, не соблюдаются - PullRequest
0 голосов
/ 22 июня 2011

У меня есть модель, подобная следующей:

class Page(ContentBase):    
    url_slug = models.SlugField()

Согласно документам SlugField, слагфилдами являются «цифры, буквы, подчеркивания и дефисы». Однако я, кажется, могу установить плохих слагов, у которых есть символы вне этой спецификации:

page = Page.objects.get(id=872)
page.url_slug = '&*()&*(*(Y*'    
page.save()

In [26]: page.url_slug
Out[26]: '&*()&*(*(Y*'

Почему это? Должен ли SlugFields проверять свои входные данные в соответствии с документами, или мне нужно сделать это самому? Почему в документации указывается ограничение, когда я, кажется, могу так легко его избежать?

1 Ответ

2 голосов
/ 22 июня 2011

Проверка SlugField выполняется посредством соответствия форм .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')
...