Skip to content

Commit 478f09a

Browse files
committed
Added support for PrimaryKeyRelatedField and ListSerializer in extract_relationships
1 parent 9c435e0 commit 478f09a

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

rest_framework_json_api/utils.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from django.utils.translation import ugettext_lazy as _
1111

1212
from rest_framework.serializers import BaseSerializer, ListSerializer
13-
from rest_framework.relations import RelatedField, HyperlinkedRelatedField
13+
from rest_framework.relations import RelatedField, HyperlinkedRelatedField, PrimaryKeyRelatedField
1414
from rest_framework.settings import api_settings
1515
from rest_framework.exceptions import APIException
1616

@@ -193,6 +193,34 @@ def extract_relationships(fields, resource):
193193
relation_data.append(OrderedDict([('type', relation_type), ('id', extract_id_from_url(link))]))
194194

195195
data.update({field_name: {'data': relation_data}})
196+
continue
197+
198+
if isinstance(relation, PrimaryKeyRelatedField):
199+
for pk in resource[field_name]:
200+
relation_data.append(OrderedDict([('type', relation_type), ('id', encoding.force_text(pk))]))
201+
202+
data.update({field_name: {'data': relation_data}})
203+
continue
204+
205+
if isinstance(field, ListSerializer):
206+
relation_data = list()
207+
208+
serializer = field.child
209+
model = serializer.Meta.model
210+
relation_type = inflection.pluralize(model.__name__).lower()
211+
212+
# Get the serializer fields
213+
serializer_fields = get_serializer_fields(serializer)
214+
serializer_data = resource[field_name]
215+
if isinstance(serializer_data, list):
216+
for serializer_resource in serializer_data:
217+
relation_data.append(
218+
OrderedDict([
219+
('type', relation_type), ('id', extract_id(serializer_fields, serializer_resource))
220+
]))
221+
222+
data.update({field_name: {'data': relation_data}})
223+
continue
196224

197225
return format_keys(data)
198226

0 commit comments

Comments
 (0)