diff options
| author | Tom Christie | 2014-01-02 01:44:49 -0800 |
|---|---|---|
| committer | Tom Christie | 2014-01-02 01:44:49 -0800 |
| commit | 2921455ea729a6dffe969918b46fd735920d17aa (patch) | |
| tree | 81491958834c6f3178394765eb6e283637b3489b | |
| parent | 1f3f2741f519967aa236cd861a79c2c459063197 (diff) | |
| parent | d30ce2575c6b3901f15eb96eeaf66cc65e1d298b (diff) | |
| download | django-rest-framework-2921455ea729a6dffe969918b46fd735920d17aa.tar.bz2 | |
Merge pull request #1318 from sheppard/generic-dj16
saving nested generic relation serializers broken in django 1.6
| -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. |
