Fix ModelSerializer to use the model field's error messages

This commit is contained in:
Alex Burgel 2013-05-24 17:45:57 -04:00
parent 00b1877106
commit d80259f7ce
2 changed files with 43 additions and 6 deletions

View File

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

View File

@ -1808,14 +1808,14 @@ class SerializerDefaultTrueBoolean(TestCase):
self.assertEqual(serializer.data['cat'], False) self.assertEqual(serializer.data['cat'], False)
self.assertEqual(serializer.data['dog'], False) self.assertEqual(serializer.data['dog'], False)
class BoolenFieldTypeTest(TestCase): class BoolenFieldTypeTest(TestCase):
''' '''
Ensure the various Boolean based model fields are rendered as the proper Ensure the various Boolean based model fields are rendered as the proper
field type field type
''' '''
def setUp(self): def setUp(self):
''' '''
Setup an ActionItemSerializer for BooleanTesting Setup an ActionItemSerializer for BooleanTesting
@ -1831,12 +1831,46 @@ class BoolenFieldTypeTest(TestCase):
''' '''
bfield = self.serializer.get_fields()['done'] bfield = self.serializer.get_fields()['done']
self.assertEqual(type(bfield), fields.BooleanField) self.assertEqual(type(bfield), fields.BooleanField)
def test_nullbooleanfield_type(self): 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 https://groups.google.com/forum/#!topic/django-rest-framework/D9mXEftpuQ8
''' '''
bfield = self.serializer.get_fields()['started'] bfield = self.serializer.get_fields()['started']
self.assertEqual(type(bfield), fields.BooleanField) 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')