Skip to content

Commit 756370e

Browse files
committed
Added test, CHANGELOG
1 parent f3a5ea7 commit 756370e

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ any parts of the framework not mentioned in the documentation should generally b
2020
* Don't swallow `filter[]` params when there are several
2121
* Fix DeprecationWarning regarding collections.abc import in Python 3.7
2222
* Allow OPTIONS request to be used on RelationshipView.
23+
* Use DRF code when extracting relation instance. [PR](https://github.com/django-json-api/django-rest-framework-json-api/pull/632)
2324

2425
## [2.7.0] - 2019-01-14
2526

example/tests/test_renderers.py

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from django.test import TestCase
2+
3+
from example.models import Blog, Entry, Comment
4+
from example.serializers import EntrySerializer
5+
from rest_framework_json_api import serializers
6+
from rest_framework_json_api.renderers import JSONRenderer
7+
8+
9+
class TestJSONRenderer(TestCase):
10+
11+
def setUp(self):
12+
pass
13+
14+
def test_extract_relation_instance(self):
15+
16+
class NewEntySerializer(EntrySerializer):
17+
blog_name = serializers.ReadOnlyField(source='blog.name')
18+
19+
class Meta(EntrySerializer.Meta):
20+
fields = EntrySerializer.Meta.fields + ('blog_name',)
21+
22+
blog = Blog.objects.create(name='Some Blog', tagline="It's a blog")
23+
entry = Entry.objects.create(
24+
blog=blog,
25+
headline='headline',
26+
body_text='body_text',
27+
)
28+
suggested_enty = Entry.objects.create(
29+
blog=blog,
30+
headline='suggested headline',
31+
body_text='suggested body_text',
32+
)
33+
comment = Comment.objects.create(entry=entry, body='foo')
34+
serializer = NewEntySerializer(instance=entry)
35+
36+
got = JSONRenderer.extract_relation_instance(
37+
field=serializer.fields['featured'], resource_instance=entry
38+
)
39+
assert got == suggested_enty
40+
41+
got = JSONRenderer.extract_relation_instance(
42+
field=serializer.fields['comments'], resource_instance=entry
43+
)
44+
assert str(got.query) == str(Comment.objects.filter(entry=entry).query)
45+
46+
got = JSONRenderer.extract_relation_instance(
47+
field=serializer.fields['blog_name'], resource_instance=entry
48+
)
49+
assert got == blog.name

rest_framework_json_api/renderers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ def extract_relationships(cls, fields, resource, resource_instance):
299299
return utils._format_object(data)
300300

301301
@classmethod
302-
def extract_relation_instance(cls, field_name, field, resource_instance, serializer):
302+
def extract_relation_instance(cls, field, resource_instance):
303303
"""
304304
Determines what instance represents given relation and extracts it.
305305
@@ -351,7 +351,7 @@ def extract_included(cls, fields, resource, resource_instance, included_resource
351351
continue
352352

353353
relation_instance = cls.extract_relation_instance(
354-
field_name, field, resource_instance, current_serializer
354+
field, resource_instance
355355
)
356356
if isinstance(relation_instance, Manager):
357357
relation_instance = relation_instance.all()

0 commit comments

Comments
 (0)