mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-06 05:20:12 +03:00
Handle MultiValueDicts properly
This commit is contained in:
parent
1ba4dad447
commit
e8da3fd9ab
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user