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
|
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):
|
def restore_fields(self, data, files):
|
||||||
"""
|
"""
|
||||||
Core of deserialization, together with `restore_object`.
|
Core of deserialization, together with `restore_object`.
|
||||||
|
@ -275,10 +284,20 @@ class BaseSerializer(WritableField):
|
||||||
self._errors['non_field_errors'] = ['Invalid data']
|
self._errors['non_field_errors'] = ['Invalid data']
|
||||||
return None
|
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():
|
for field_name, field in self.fields.items():
|
||||||
field.initialize(parent=self, field_name=field_name)
|
field.initialize(parent=self, field_name=field_name)
|
||||||
try:
|
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:
|
except ValidationError as err:
|
||||||
self._errors[field_name] = list(err.messages)
|
self._errors[field_name] = list(err.messages)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user