summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Rosner <brosner@gmail.com>2008-08-23 04:59:25 +0000
committerBrian Rosner <brosner@gmail.com>2008-08-23 04:59:25 +0000
commit5061970b76194d6a170d80ffab18260f138951c4 (patch)
tree631b931d5a3c7548c691a8b4d1f0b53ef7ff9cdc
parenta64dc39fb7c6787c83ea2e807c5bf2f94ad5909d (diff)
Fixed #8040 -- SlugField now returns a proper formfield to deal with validation. Thanks Daniel Pope for the ticket and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8477 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/fields/__init__.py7
-rw-r--r--docs/modelforms.txt3
-rw-r--r--tests/modeltests/model_forms/models.py4
3 files changed, 11 insertions, 3 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 74b8563e2c..03e8994ee8 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -890,6 +890,13 @@ class SlugField(CharField):
def get_internal_type(self):
return "SlugField"
+ def formfield(self, **kwargs):
+ defaults = {'form_class': forms.RegexField, 'regex': r'^[a-zA-Z0-9_-]+$',
+ 'error_messages': {'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.")},
+ }
+ defaults.update(kwargs)
+ return super(SlugField, self).formfield(**defaults)
+
class SmallIntegerField(IntegerField):
def get_manipulator_field_objs(self):
return [oldforms.SmallIntegerField]
diff --git a/docs/modelforms.txt b/docs/modelforms.txt
index 1be7c3a882..b9495e0acd 100644
--- a/docs/modelforms.txt
+++ b/docs/modelforms.txt
@@ -65,7 +65,8 @@ the full list of conversions:
(from ``django.contrib.localflavor.us``)
``PositiveIntegerField`` ``IntegerField``
``PositiveSmallIntegerField`` ``IntegerField``
- ``SlugField`` ``CharField``
+ ``SlugField`` ``RegexField`` accepting only letters,
+ numbers, underscores and hyphens
``SmallIntegerField`` ``IntegerField``
``TextField`` ``CharField`` with ``widget=Textarea``
``TimeField`` ``TimeField``
diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py
index c7e726ee4e..da45f23f74 100644
--- a/tests/modeltests/model_forms/models.py
+++ b/tests/modeltests/model_forms/models.py
@@ -301,11 +301,11 @@ u'third-test'
[<Category: Entertainment>, <Category: It's a test>, <Category: Third test>]
If you call save() with invalid data, you'll get a ValueError.
->>> f = CategoryForm({'name': '', 'slug': '', 'url': 'foo'})
+>>> f = CategoryForm({'name': '', 'slug': 'not a slug!', 'url': 'foo'})
>>> f.errors['name']
[u'This field is required.']
>>> f.errors['slug']
-[u'This field is required.']
+[u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."]
>>> f.cleaned_data
Traceback (most recent call last):
...