From 03a9137abd2ed69c4a8fc1784cfce2d7ce444f23 Mon Sep 17 00:00:00 2001 From: Andrey Kolpakov Date: Mon, 7 Dec 2015 13:26:10 +0100 Subject: [PATCH 1/2] test case for #3598 --- tests/test_model_serializer.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 57e540e7a5..3186165c91 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -19,6 +19,7 @@ from django.db import models from django.test import TestCase from django.utils import six +from django.http import QueryDict from rest_framework import serializers from rest_framework.compat import DurationField as ModelDurationField @@ -899,3 +900,35 @@ class Meta: serializer = TestSerializer() assert len(serializer.fields['decimal_field'].validators) == 2 + + +class Issue3598TestCase(TestCase): + def test_queryset_all(self): + class TestRelationSerializer(serializers.ModelSerializer): + class Meta: + model = RelationalModel + fields = ('many_to_many', ) + + class TestSerializer(serializers.ModelSerializer): + reverse_foreign_key = TestRelationSerializer(required=False) + + class Meta: + model = ForeignKeyTargetModel + + new_many_to_many = [ + ManyToManyTargetModel.objects.create( + name='new many_to_many (%d)' % idx + ) for idx in range(3) + ] + + data = QueryDict('name=test&' + '&'.join(['reverse_foreign_key.many_to_many=%s' % item.pk for item in new_many_to_many])) + + serializer = TestSerializer(data=data) + assert serializer.is_valid() + + expected_data = { + 'name': 'test', + 'reverse_foreign_key': {'many_to_many': [item.pk for item in new_many_to_many]} + } + + self.assertEqual(serializer.data, expected_data) From d1f5d7d12160478f9e1254ebbd655b321d7633f8 Mon Sep 17 00:00:00 2001 From: Andrey Kolpakov Date: Mon, 7 Dec 2015 13:38:27 +0100 Subject: [PATCH 2/2] fix flake8 --- tests/test_model_serializer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 3186165c91..3b6af9ae39 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -17,9 +17,9 @@ MaxValueValidator, MinLengthValidator, MinValueValidator ) from django.db import models +from django.http import QueryDict from django.test import TestCase from django.utils import six -from django.http import QueryDict from rest_framework import serializers from rest_framework.compat import DurationField as ModelDurationField @@ -928,7 +928,7 @@ class Meta: expected_data = { 'name': 'test', - 'reverse_foreign_key': {'many_to_many': [item.pk for item in new_many_to_many]} + 'reverse_foreign_key': {'many_to_many': [item.pk for item in new_many_to_many]} } self.assertEqual(serializer.data, expected_data)