def perform_action(self, validated_data, instance=None, **kwargs):
new_instance = None
for k, v in validated_data.iteritems():
drf_field = self.fields[k]
if isinstance(drf_field, serializers.BaseSerializer):
value = self._set_new_instance(
new_instance, instance, drf_field, v, **kwargs)
if value:
new_instance = value
elif instance is not None:
self.update_non_model_field(drf_field, instance, v,
validated_data)
else:
self.create_non_model_field(drf_field, v, validated_data)
# In case of an update action where `instance` has specified,
# there is a case when client sent empty data, and, therefore,
# current instance is not updated. Thus, in this case, return
# the current instance instead of the new one.
return new_instance or getattr(self, 'instance', None)
评论列表
文章目录