This commit is contained in:
John Downs 2017-11-14 19:30:17 +00:00 committed by GitHub
commit de75bf8baf
2 changed files with 12 additions and 1 deletions

View File

@ -900,6 +900,9 @@ class ModelSerializer(Serializer):
if model_field.help_text is not None:
kwargs['help_text'] = model_field.help_text
if model_field.error_messages is not None:
kwargs['error_messages'] = model_field.error_messages
# TODO: TypedChoiceField?
if model_field.flatchoices: # This ModelField contains choices
kwargs['choices'] = model_field.flatchoices

View File

@ -1344,7 +1344,8 @@ class SeveralChoicesModel(models.Model):
max_length=10,
choices=[('rock', 'Rock'), ('metal', 'Metal'), ('grunge', 'Grunge')],
blank=True,
default='metal'
default='metal',
error_messages={'invalid_choice': 'The choice %(value)s is invalid. Please choose one of ["rock", "metal", "grunge"]'}
)
@ -1388,6 +1389,13 @@ class SerializerChoiceFields(TestCase):
BLANK_CHOICE_DASH + [('rock', 'Rock'), ('metal', 'Metal'), ('grunge', 'Grunge')]
)
def test_field_propagates_error_messages(self):
data = {'color': 'blue', 'music_genre': 'grindcore'}
serializer = self.several_choices_serializer(data=data)
self.assertFalse(serializer.is_valid())
expected_errors = {'music_genre': ['The choice grindcore is invalid. Please choose one of ["rock", "metal", "grunge"]']}
self.assertEqual(serializer.errors, expected_errors)
# Regression tests for #675
class Ticket(models.Model):