From 184ab5fd4acfbb2ca4a0147f683da7ac717ec946 Mon Sep 17 00:00:00 2001 From: Thomas Bartelmess Date: Sun, 17 Jul 2016 13:50:38 -0400 Subject: [PATCH 1/2] add a test for including many objects from a related serializer --- example/serializers.py | 1 + example/tests/integration/test_includes.py | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/example/serializers.py b/example/serializers.py index c1b1c6b4..7929577b 100644 --- a/example/serializers.py +++ b/example/serializers.py @@ -35,6 +35,7 @@ def __init__(self, *args, **kwargs): 'authors': 'example.serializers.AuthorSerializer', 'comments': 'example.serializers.CommentSerializer', 'featured': 'example.serializers.EntrySerializer', + 'suggested': 'example.serializers.EntrySerializer', } body_format = serializers.SerializerMethodField() diff --git a/example/tests/integration/test_includes.py b/example/tests/integration/test_includes.py index 8e2a7a2a..556e5bf0 100644 --- a/example/tests/integration/test_includes.py +++ b/example/tests/integration/test_includes.py @@ -50,6 +50,15 @@ def test_dynamic_related_data_is_included(single_entry, entry_factory, client): assert len(included) == 1, 'The dynamically included blog entries are of an incorrect count' +def test_dynamic_many_related_data_is_included(single_entry, entry_factory, client): + entry_factory() + response = client.get(reverse("entry-detail", kwargs={'pk': single_entry.pk}) + '?include=suggested') + included = load_json(response.content).get('included') + + assert included + assert [x.get('type') for x in included] == ['entries'], 'Dynamic included types are incorrect' + + def test_missing_field_not_included(author_bio_factory, author_factory, client): # First author does not have a bio author = author_factory(bio=None) From c1049e48182e98cec7f00bae8cc3cfca37cd74f8 Mon Sep 17 00:00:00 2001 From: Thomas Bartelmess Date: Tue, 19 Jul 2016 10:14:58 -0400 Subject: [PATCH 2/2] =?UTF-8?q?use=20the=20presense=20of=20=E2=80=98child?= =?UTF-8?q?=5Frelation=E2=80=99=20in=20kwargs=20to=20see=20if=20it?= =?UTF-8?q?=E2=80=99s=20a=20many=20relationship?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rest_framework_json_api/renderers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rest_framework_json_api/renderers.py b/rest_framework_json_api/renderers.py index 83332566..d52d5d73 100644 --- a/rest_framework_json_api/renderers.py +++ b/rest_framework_json_api/renderers.py @@ -283,7 +283,12 @@ def extract_included(fields, resource, resource_instance, included_resources): serializer_class = included_serializers.get(field_name) if relation_instance_or_manager is None: continue - field = serializer_class(relation_instance_or_manager, context=context) + + many = field._kwargs.get('child_relation', None) is not None + + field = serializer_class(relation_instance_or_manager, + many=many, + context=context) serializer_data = field.data if isinstance(field, ListSerializer):