diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 38b5089a8..3e33f7867 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -848,6 +848,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 diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index 75d6e7859..a1e3601f9 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -1808,14 +1808,14 @@ class SerializerDefaultTrueBoolean(TestCase): self.assertEqual(serializer.data['cat'], False) self.assertEqual(serializer.data['dog'], False) - + class BoolenFieldTypeTest(TestCase): ''' Ensure the various Boolean based model fields are rendered as the proper field type - + ''' - + def setUp(self): ''' Setup an ActionItemSerializer for BooleanTesting @@ -1831,12 +1831,46 @@ class BoolenFieldTypeTest(TestCase): ''' bfield = self.serializer.get_fields()['done'] self.assertEqual(type(bfield), fields.BooleanField) - + def test_nullbooleanfield_type(self): ''' - Test that BooleanField is infered from models.NullBooleanField - + Test that BooleanField is infered from models.NullBooleanField + https://groups.google.com/forum/#!topic/django-rest-framework/D9mXEftpuQ8 ''' bfield = self.serializer.get_fields()['started'] self.assertEqual(type(bfield), fields.BooleanField) + + +class ErrorMessagesOnAutogeneratedFieldsTests(TestCase): + + def setUp(self): + class EMOAFModel(RESTFrameworkModel): + char_field = models.CharField(blank=False, max_length=5, error_messages={ + 'required': 'required', + 'max_length': 'max_length %(limit_value)d', + }) + + class EMOAFSerializer(serializers.ModelSerializer): + class Meta: + model = EMOAFModel + + self.serializer_class = EMOAFSerializer + + def error_test(self, data, expected_message): + serializer = self.serializer_class(data=data) + self.assertEqual(serializer.is_valid(), False) + self.assertEqual(len(serializer.errors), 1) + + for (field_name, message) in serializer.errors.items(): + self.assertEqual('char_field', field_name) + self.assertEqual(expected_message, message[0]) + + def test_required(self): + self.error_test({}, 'required') + + def test_required(self): + self.error_test({'char_field': None}, 'required') + + def test_max_length(self): + self.error_test({'char_field': 'abcdef'}, 'max_length 5')