Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit aab3455

Browse files
Added test, CHANGELOG
1 parent f3a5ea7 commit aab3455

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

‎CHANGELOG.md

Lines changed: 1 addition & 0 deletions
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

Lines changed: 49 additions & 0 deletions
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.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

Lines changed: 2 additions & 2 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /