Merge pull request #875 from commonorgarden/master

Issue 874 - Update SlugField to raise validation errors for invalid slugs
This commit is contained in:
Tom Christie 2013-05-20 05:20:18 -07:00
commit 9f455fbc07
2 changed files with 31 additions and 2 deletions

View File

@ -389,11 +389,25 @@ class URLField(CharField):
class SlugField(CharField):
type_name = 'SlugField'
form_field_class = forms.SlugField
default_error_messages = {
'invalid': _("Enter a valid 'slug' consisting of letters, numbers,"
" underscores or hyphens."),
}
default_validators = [validators.validate_slug]
def __init__(self, *args, **kwargs):
super(SlugField, self).__init__(*args, **kwargs)
def __deepcopy__(self, memo):
result = copy.copy(self)
memo[id(self)] = result
#result.widget = copy.deepcopy(self.widget, memo)
result.validators = self.validators[:]
return result
class ChoiceField(WritableField):
type_name = 'ChoiceField'
form_field_class = forms.ChoiceField

View File

@ -769,6 +769,21 @@ class SlugFieldTests(TestCase):
self.assertEqual(serializer.is_valid(), True)
self.assertEqual(getattr(serializer.fields['slug_field'], 'max_length'), 20)
def test_invalid_slug(self):
"""
Make sure an invalid slug raises ValidationError
"""
class SlugFieldSerializer(serializers.ModelSerializer):
slug_field = serializers.SlugField(source='slug_field', max_length=20, required=True)
class Meta:
model = self.SlugFieldModel
s = SlugFieldSerializer(data={'slug_field': 'a b'})
self.assertEqual(s.is_valid(), False)
self.assertEqual(s.errors, {'slug_field': ["Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."]})
class URLFieldTests(TestCase):
"""