Skip to content

Commit a4ecd9a

Browse files
committed
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

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

+19-1
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

+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)