Handle MultiValueDicts properly

This commit is contained in:
Alan Braithwaite 2014-04-04 11:22:00 -07:00
parent 1ba4dad447
commit e8da3fd9ab

View File

@ -270,7 +270,10 @@ class BaseSerializer(WritableField):
""" """
ret = SortedDict() ret = SortedDict()
for name, value in list(self.fields.items()): for name, value in list(self.fields.items()):
ret[self.get_field_key(name)] = name key = self.get_field_key(name)
if key in ret:
raise Warning()
ret[key] = name
return ret return ret
def restore_fields(self, data, files): def restore_fields(self, data, files):
@ -284,15 +287,22 @@ class BaseSerializer(WritableField):
self._errors['non_field_errors'] = ['Invalid data'] self._errors['non_field_errors'] = ['Invalid data']
return None return None
translated_data = SortedDict() # Handle translation of serialized fields into non serailzed fields
field_name_map = self.get_field_name_map() if data is not None:
for k,v in data.items(): translated_data = copy.deepcopy(data)
try: field_name_map = self.get_field_name_map()
python_field = field_name_map[k] for key in translated_data.keys():
except KeyError: if key in field_name_map:
pass newkey = field_name_map.get(key)
else: try: # MultiValueDict
translated_data[python_field] = v value = translated_data.getlist(key)
del translated_data[key]
translated_data.setlist(newkey, value)
except AttributeError:
value = translated_data.pop(key)
translated_data[newkey] = value
else: # Data can be None so translated_data is too
translated_data = None
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)