summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2013-06-13 18:37:08 +0200
committerTim Graham <timograham@gmail.com>2013-06-13 13:31:57 -0400
commitdc9c359546580d40df209816cef244b78dcf7435 (patch)
tree88e146d707a66c033321050b6737e17b09226f59
parent675558d00efab507ef2e538025f20abc6725b159 (diff)
Fixed #20594 -- Add validation to models.SlugField.
Thanks carbonXT for the report.
-rw-r--r--django/db/models/fields/__init__.py3
-rw-r--r--django/forms/fields.py5
-rw-r--r--tests/validation/models.py1
-rw-r--r--tests/validation/tests.py6
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):