mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 10:03:57 +03:00
Merge pull request #875 from commonorgarden/master
Issue 874 - Update SlugField to raise validation errors for invalid slugs
This commit is contained in:
commit
9f455fbc07
|
@ -389,11 +389,25 @@ class URLField(CharField):
|
||||||
|
|
||||||
class SlugField(CharField):
|
class SlugField(CharField):
|
||||||
type_name = 'SlugField'
|
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):
|
def __init__(self, *args, **kwargs):
|
||||||
super(SlugField, self).__init__(*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):
|
class ChoiceField(WritableField):
|
||||||
type_name = 'ChoiceField'
|
type_name = 'ChoiceField'
|
||||||
form_field_class = forms.ChoiceField
|
form_field_class = forms.ChoiceField
|
||||||
|
|
|
@ -769,6 +769,21 @@ class SlugFieldTests(TestCase):
|
||||||
self.assertEqual(serializer.is_valid(), True)
|
self.assertEqual(serializer.is_valid(), True)
|
||||||
self.assertEqual(getattr(serializer.fields['slug_field'], 'max_length'), 20)
|
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):
|
class URLFieldTests(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user