@@ -139,6 +139,24 @@ def build_json_resource_obj(fields, resource, resource_name):
139139 return OrderedDict (resource_data )
140140
141141
142+ def get_related_resource_type (relation ):
143+ queryset = relation .queryset
144+ if queryset is not None :
145+ relation_model = queryset .model
146+ else :
147+ parent_serializer = relation .parent
148+ if hasattr (parent_serializer , 'Meta' ):
149+ parent_model = parent_serializer .Meta .model
150+ else :
151+ parent_model = parent_serializer .parent .Meta .model
152+ parent_model_relation = getattr (
153+ parent_model ,
154+ (parent_serializer .field_name if parent_serializer .field_name else relation .field_name )
155+ )
156+ relation_model = parent_model_relation .related .model
157+ return inflection .pluralize (relation_model .__name__ ).lower ()
158+
159+
142160def extract_id_from_url (url ):
143161 http_prefix = url .startswith (('http:' , 'https:' ))
144162 if http_prefix :
@@ -188,8 +206,7 @@ def extract_relationships(fields, resource):
188206 continue
189207
190208 if isinstance (field , (PrimaryKeyRelatedField , HyperlinkedRelatedField )):
191- relation_model = field .queryset .model
192- relation_type = inflection .pluralize (relation_model .__name__ ).lower ()
209+ relation_type = get_related_resource_type (field )
193210
194211 if resource [field_name ] is not None :
195212 if isinstance (field , PrimaryKeyRelatedField ):
@@ -214,16 +231,8 @@ def extract_relationships(fields, resource):
214231 relation_data = list ()
215232
216233 relation = field .child_relation
217- queryset = relation .queryset
218- if queryset is not None :
219- relation_model = queryset .model
220- else :
221- parent_serializer = field .parent
222- parent_model = parent_serializer .Meta .model
223- parent_model_relation = getattr (parent_model , field_name )
224- relation_model = parent_model_relation .related .model
225234
226- relation_type = inflection . pluralize ( relation_model . __name__ ). lower ( )
235+ relation_type = get_related_resource_type ( relation )
227236
228237 if isinstance (relation , HyperlinkedRelatedField ):
229238 for link in resource [field_name ]:
0 commit comments