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 a4ecd9a

Browse files
Added test, CHANGELOG
1 parent f3a5ea7 commit a4ecd9a

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
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/unit/test_renderer_class_methods.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99

1010
class ResourceSerializer(serializers.ModelSerializer):
1111
version = serializers.SerializerMethodField()
12+
skipped_field = serializers.ReadOnlyField(source='foobar')
1213

1314
def get_version(self, obj):
1415
return '1.0.0'
1516

1617
class Meta:
17-
fields = ('username',)
18+
fields = ('username','skipped_field')
1819
meta_fields = ('version',)
1920
model = get_user_model()
2021

@@ -148,3 +149,20 @@ def test_extract_root_meta_invalid_meta():
148149
serializer = InvalidExtractRootMetaResourceSerializer()
149150
with pytest.raises(AssertionError):
150151
JSONRenderer.extract_root_meta(serializer, {})
152+
153+
154+
def test_extract_relation_instance():
155+
User = get_user_model()
156+
user = User.objects.create(username='foo')
157+
serializer = ResourceSerializer(instance=user)
158+
159+
got = JSONRenderer.extract_relation_instance(
160+
field=serializer.fields['username'], resource_instance=user
161+
)
162+
expected = 'foo'
163+
assert got == expected
164+
165+
got = JSONRenderer.extract_relation_instance(
166+
field=serializer.fields['skipped_field'], resource_instance=user
167+
)
168+
assert got is None

‎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 によって変換されたページ (->オリジナル) /