diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 6caae9242..2edb24d6a 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -380,6 +380,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 43d339da0..73f0fd611 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -1013,7 +1013,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 = self.fields[accessor_name] + field.save_serializer_data(obj, accessor_name, object_list) del(obj._m2m_data) if getattr(obj, '_related_data', None):