Reputation: 1571
When model field validation fail, I would like DRF to return the field verbose_name in the error message.
example :
models.py :
class MyClass(models.Model):
myfield = model.CharField(max_length=20,\
verbose_name="This is the field",\
default="blabla")
serialiers.py :
class MyClassSerializer(serializers.ModelSerializer):
class Meta:
model = MyClass
fields = ('myfield',)
If, POSTED data for this field is more than 20 characters, response payload is:
{"myfield":["the error message..........."]}
To make a friendlier message for the users (... and easily manage the errors :-) ) , I'd like to use the model field's verbose_name, so the response payload would be :
{"This is the field":["the error message..........."]}
Do you have any idea? Thanks!
Upvotes: 3
Views: 1331
Reputation: 953
I dont think there is an easy way of doing this. The easiest way would be overriding errors
property of serializer and changing error keys with verbose name.
class TestSerializer(serializers.ModelSerializer):
class Meta:
model = ...
fields = ('field1', ...)
@property
def errors(self):
# get errors
errors = super().errors
verbose_errors = {}
# fields = { field.name: field.verbose_name } for each field in model
fields = {field.name: field.verbose_name for field in
self.Meta.model._meta.get_fields() if hasattr(field, 'verbose_name')}
# iterate over errors and replace error key with verbose name if exists
for field_name, error in errors.items():
if field_name in fields:
verbose_errors[str(fields[field_name])] = error
else:
verbose_errors[field_name] = error
return verbose_errors
Upvotes: 2