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:
Alan Braithwaite 2014-04-02 15:16:07 -07:00
parent 591cf8a48c
commit 1ba4dad447

View File

@ -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)