diff options
| -rw-r--r-- | rest_framework/serializers.py | 2 | ||||
| -rw-r--r-- | rest_framework/tests/test_genericrelations.py | 29 | 
2 files changed, 30 insertions, 1 deletions
| diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 8351b3df..c0c810ab 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -894,7 +894,7 @@ class ModelSerializer(Serializer):                  m2m_data[field_name] = attrs.pop(field_name)          # Forward m2m relations -        for field in meta.many_to_many: +        for field in meta.many_to_many + meta.virtual_fields:              if field.name in attrs:                  m2m_data[field.name] = attrs.pop(field.name) diff --git a/rest_framework/tests/test_genericrelations.py b/rest_framework/tests/test_genericrelations.py index c38bfb9f..2d341344 100644 --- a/rest_framework/tests/test_genericrelations.py +++ b/rest_framework/tests/test_genericrelations.py @@ -69,6 +69,35 @@ class TestGenericRelations(TestCase):          }          self.assertEqual(serializer.data, expected) +    def test_generic_nested_relation(self): +        """ +        Test saving a GenericRelation field via a nested serializer. +        """ + +        class TagSerializer(serializers.ModelSerializer): +            class Meta: +                model = Tag +                exclude = ('content_type', 'object_id') + +        class BookmarkSerializer(serializers.ModelSerializer): +            tags = TagSerializer() + +            class Meta: +                model = Bookmark +                exclude = ('id',) + +        data = { +            'url': 'https://docs.djangoproject.com/', +            'tags': [ +                {'tag': 'contenttypes'}, +                {'tag': 'genericrelations'}, +            ] +        } +        serializer = BookmarkSerializer(data=data) +        self.assertTrue(serializer.is_valid()) +        serializer.save() +        self.assertEqual(serializer.object.tags.count(), 2) +      def test_generic_fk(self):          """          Test a relationship that spans a GenericForeignKey field. | 
