From 25bd6d1d4b7a85279047ab8e35f6faee0bc10a1a Mon Sep 17 00:00:00 2001 From: S. Andrew Sheppard Date: Mon, 23 Dec 2013 22:27:40 -0600 Subject: can't save genericrelations via nested serializers in django 1.6 --- rest_framework/tests/test_genericrelations.py | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'rest_framework') 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. -- cgit v1.2.3 From d30ce2575c6b3901f15eb96eeaf66cc65e1d298b Mon Sep 17 00:00:00 2001 From: S. Andrew Sheppard Date: Mon, 23 Dec 2013 22:31:31 -0600 Subject: fix for genericrelation saving --- rest_framework/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'rest_framework') 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) -- cgit v1.2.3