mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 21:10:13 +03:00
Functionality to convert field names on objects
Added the necessary functionality for translating fields to have different names between the frontend and backend.
This commit is contained in:
parent
591cf8a48c
commit
1ba4dad447
|
@ -264,6 +264,15 @@ class BaseSerializer(WritableField):
|
|||
"""
|
||||
return field_name
|
||||
|
||||
def get_field_name_map(self):
|
||||
"""
|
||||
Return a map of serialized->python field names
|
||||
"""
|
||||
ret = SortedDict()
|
||||
for name, value in list(self.fields.items()):
|
||||
ret[self.get_field_key(name)] = name
|
||||
return ret
|
||||
|
||||
def restore_fields(self, data, files):
|
||||
"""
|
||||
Core of deserialization, together with `restore_object`.
|
||||
|
@ -275,10 +284,20 @@ class BaseSerializer(WritableField):
|
|||
self._errors['non_field_errors'] = ['Invalid data']
|
||||
return None
|
||||
|
||||
translated_data = SortedDict()
|
||||
field_name_map = self.get_field_name_map()
|
||||
for k,v in data.items():
|
||||
try:
|
||||
python_field = field_name_map[k]
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
translated_data[python_field] = v
|
||||
|
||||
for field_name, field in self.fields.items():
|
||||
field.initialize(parent=self, field_name=field_name)
|
||||
try:
|
||||
field.field_from_native(data, files, field_name, reverted_data)
|
||||
field.field_from_native(translated_data, files, field_name, reverted_data)
|
||||
except ValidationError as err:
|
||||
self._errors[field_name] = list(err.messages)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user