diff options
| author | Tom Christie | 2014-01-03 13:27:00 +0000 |
|---|---|---|
| committer | Tom Christie | 2014-01-03 13:27:00 +0000 |
| commit | 399e4d9b0879288130ae2d04634802c53e5423fe (patch) | |
| tree | b8fcb60a7ba15a5e78a6170c98c4662def794d5e /rest_framework | |
| parent | 3050f0e82a60a12dc35ef7947c2f47de12387919 (diff) | |
| parent | 442916b9649baaf305ff094fe05f026ad04c7818 (diff) | |
| download | django-rest-framework-399e4d9b0879288130ae2d04634802c53e5423fe.tar.bz2 | |
Merge branch 'master' into logo
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/serializers.py | 4 | ||||
| -rw-r--r-- | rest_framework/tests/test_genericrelations.py | 29 |
2 files changed, 31 insertions, 2 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 8351b3df..b22ca578 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -331,7 +331,7 @@ class BaseSerializer(WritableField): return ret - def from_native(self, data, files): + def from_native(self, data, files=None): """ Deserialize primitives -> objects. """ @@ -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. |
