diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 0c3817b57..24aaf80ba 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -342,6 +342,8 @@ class WritableField(Field): """ return value + def save_serializer_data(self, instance, field_name, data): + setattr(instance, field_name, data) class ModelField(WritableField): """ diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 8d2e0feb8..d8ea02ba3 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -904,7 +904,8 @@ class ModelSerializer(Serializer): if getattr(obj, '_m2m_data', None): for accessor_name, object_list in obj._m2m_data.items(): - setattr(obj, accessor_name, object_list) + field = obj._meta.get_field_by_name(accessor_name)[0] + field.save_serializer_data(obj, accessor_name, object_list) del(obj._m2m_data) if getattr(obj, '_related_data', None):