diff options
| author | Baptiste Mispelon <bmispelon@gmail.com> | 2013-06-13 18:37:08 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-06-13 13:31:57 -0400 |
| commit | dc9c359546580d40df209816cef244b78dcf7435 (patch) | |
| tree | 88e146d707a66c033321050b6737e17b09226f59 | |
| parent | 675558d00efab507ef2e538025f20abc6725b159 (diff) | |
Fixed #20594 -- Add validation to models.SlugField.
Thanks carbonXT for the report.
| -rw-r--r-- | django/db/models/fields/__init__.py | 3 | ||||
| -rw-r--r-- | django/forms/fields.py | 5 | ||||
| -rw-r--r-- | tests/validation/models.py | 1 | ||||
| -rw-r--r-- | tests/validation/tests.py | 6 |
4 files changed, 9 insertions, 6 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 7d01391d4f..cf81a27997 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -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 diff --git a/django/forms/fields.py b/django/forms/fields.py index ac68b9f1fc..420690704f 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -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): diff --git a/tests/validation/models.py b/tests/validation/models.py index e95a1e0744..958740dd2d 100644 --- a/tests/validation/models.py +++ b/tests/validation/models.py @@ -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() diff --git a/tests/validation/tests.py b/tests/validation/tests.py index 9ddf796c2b..c8b679541a 100644 --- a/tests/validation/tests.py +++ b/tests/validation/tests.py @@ -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): |
