Commit dc9c3595 authored by Baptiste Mispelon's avatar Baptiste Mispelon Committed by Tim Graham
Browse files

Fixed #20594 -- Add validation to models.SlugField.

Thanks carbonXT for the report.
parent 675558d0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1211,6 +1211,7 @@ class PositiveSmallIntegerField(IntegerField):
        return super(PositiveSmallIntegerField, self).formfield(**defaults)

class SlugField(CharField):
    default_validators = [validators.validate_slug]
    description = _("Slug (up to %(max_length)s)")

    def __init__(self, *args, **kwargs):
@@ -1320,12 +1321,12 @@ class TimeField(Field):
        return super(TimeField, self).formfield(**defaults)

class URLField(CharField):
    default_validators = [validators.URLValidator()]
    description = _("URL")

    def __init__(self, verbose_name=None, name=None, **kwargs):
        kwargs['max_length'] = kwargs.get('max_length', 200)
        CharField.__init__(self, verbose_name, name, **kwargs)
        self.validators.append(validators.URLValidator())

    def formfield(self, **kwargs):
        # As with CharField, this will cause URL validation to be performed
+1 −4
Original line number Diff line number Diff line
@@ -638,10 +638,7 @@ class URLField(CharField):
    default_error_messages = {
        'invalid': _('Enter a valid URL.'),
    }

    def __init__(self, max_length=None, min_length=None, *args, **kwargs):
        super(URLField, self).__init__(max_length, min_length, *args, **kwargs)
        self.validators.append(validators.URLValidator())
    default_validators = [validators.URLValidator()]

    def to_python(self, value):

+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ class ModelToValidate(models.Model):
    email = models.EmailField(blank=True)
    url = models.URLField(blank=True)
    f_with_custom_validator = models.IntegerField(blank=True, null=True, validators=[validate_answer_to_universe])
    slug = models.SlugField(blank=True)

    def clean(self):
        super(ModelToValidate, self).clean()
+5 −1
Original line number Diff line number Diff line
@@ -53,7 +53,11 @@ class BaseModelValidationTests(ValidationTestCase):

    def test_text_greater_that_charfields_max_length_raises_erros(self):
        mtv = ModelToValidate(number=10, name='Some Name'*100)
        self.assertFailsValidation(mtv.full_clean, ['name',])
        self.assertFailsValidation(mtv.full_clean, ['name'])

    def test_malformed_slug_raises_error(self):
        mtv = ModelToValidate(number=10, name='Some Name', slug='##invalid##')
        self.assertFailsValidation(mtv.full_clean, ['slug'])


class ArticleForm(forms.ModelForm):