diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 470490042..8c91431db 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -305,15 +305,6 @@ def set_rollback(): pass -# TODO: Remove -def set_many(instance, field, value): - if django.VERSION < (1, 10): - setattr(instance, field, value) - else: - field = getattr(instance, field) - field.set(value) - - # TODO: Remove def include(module, namespace=None, app_name=None): from django.conf.urls import include diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index fa62044c8..59533be1e 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -27,7 +27,7 @@ from django.utils import six, timezone from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ -from rest_framework.compat import postgres_fields, set_many, unicode_to_repr +from rest_framework.compat import postgres_fields, unicode_to_repr from rest_framework.exceptions import ErrorDetail, ValidationError from rest_framework.fields import get_error_detail, set_value from rest_framework.settings import api_settings @@ -932,7 +932,8 @@ class ModelSerializer(Serializer): # Save many-to-many relationships after the instance is created. if many_to_many: for field_name, value in many_to_many.items(): - set_many(instance, field_name, value) + field = getattr(instance, field_name) + field.set(value) return instance @@ -946,7 +947,8 @@ class ModelSerializer(Serializer): # have an instance pk for the relationships to be associated with. for attr, value in validated_data.items(): if attr in info.relations and info.relations[attr].to_many: - set_many(instance, attr, value) + field = getattr(instance, attr) + field.set(value) else: setattr(instance, attr, value) instance.save() diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 3411c44b5..203e1fe7f 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -21,7 +21,7 @@ from django.test import TestCase from django.utils import six from rest_framework import serializers -from rest_framework.compat import set_many, unicode_repr +from rest_framework.compat import unicode_repr def dedent(blocktext): @@ -703,8 +703,7 @@ class TestIntegration(TestCase): foreign_key=self.foreign_key_target, one_to_one=self.one_to_one_target, ) - set_many(self.instance, 'many_to_many', self.many_to_many_targets) - self.instance.save() + self.instance.many_to_many.set(self.many_to_many_targets) def test_pk_retrival(self): class TestSerializer(serializers.ModelSerializer): diff --git a/tests/test_permissions.py b/tests/test_permissions.py index f673c3671..7ccd43613 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -11,7 +11,7 @@ from rest_framework import ( HTTP_HEADER_ENCODING, authentication, generics, permissions, serializers, status, views ) -from rest_framework.compat import ResolverMatch, guardian, set_many +from rest_framework.compat import ResolverMatch, guardian from rest_framework.filters import DjangoObjectPermissionsFilter from rest_framework.routers import DefaultRouter from rest_framework.test import APIRequestFactory @@ -73,13 +73,14 @@ class ModelPermissionsIntegrationTests(TestCase): def setUp(self): User.objects.create_user('disallowed', 'disallowed@example.com', 'password') user = User.objects.create_user('permitted', 'permitted@example.com', 'password') - set_many(user, 'user_permissions', [ + user.user_permissions.set([ Permission.objects.get(codename='add_basicmodel'), Permission.objects.get(codename='change_basicmodel'), Permission.objects.get(codename='delete_basicmodel') ]) + user = User.objects.create_user('updateonly', 'updateonly@example.com', 'password') - set_many(user, 'user_permissions', [ + user.user_permissions.set([ Permission.objects.get(codename='change_basicmodel'), ]) diff --git a/tests/test_prefetch_related.py b/tests/test_prefetch_related.py index b87bc2f66..b07087c97 100644 --- a/tests/test_prefetch_related.py +++ b/tests/test_prefetch_related.py @@ -2,7 +2,6 @@ from django.contrib.auth.models import Group, User from django.test import TestCase from rest_framework import generics, serializers -from rest_framework.compat import set_many from rest_framework.test import APIRequestFactory factory = APIRequestFactory() @@ -23,8 +22,7 @@ class TestPrefetchRelatedUpdates(TestCase): def setUp(self): self.user = User.objects.create(username='tom', email='tom@example.com') self.groups = [Group.objects.create(name='a'), Group.objects.create(name='b')] - set_many(self.user, 'groups', self.groups) - self.user.save() + self.user.groups.set(self.groups) def test_prefetch_related_updates(self): view = UserUpdate.as_view()