Skip to content

Commit 747982a

Browse files
committed
Added related fields filtering
1 parent bda8f63 commit 747982a

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

rest_framework_json_api/views.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ class RelatedMixin(object):
108108
This mixin handles all related entities, whose Serializers are declared in "related_serializers"
109109
"""
110110

111+
related_filter_backends = {}
112+
111113
def retrieve_related(self, request, *args, **kwargs):
112114
serializer_kwargs = {}
113115
instance = self.get_related_instance()
@@ -164,13 +166,24 @@ def get_related_instance(self):
164166
field = parent_serializer.fields.get(field_name, None)
165167

166168
if field is not None:
167-
return field.get_attribute(parent_obj)
169+
result = field.get_attribute(parent_obj)
168170
else:
169171
try:
170-
return getattr(parent_obj, field_name)
172+
result = getattr(parent_obj, field_name)
171173
except AttributeError:
172174
raise NotFound
173175

176+
if isinstance(result, QuerySet):
177+
result = self.filter_related_queryset(field_name, result)
178+
179+
return result
180+
181+
def filter_related_queryset(self, field_name, queryset):
182+
backends = self.related_filter_backends.get(field_name, [])
183+
for backend in list(backends):
184+
queryset = backend().filter_queryset(self.request, queryset, self)
185+
return queryset
186+
174187

175188
class ModelViewSet(AutoPrefetchMixin,
176189
PrefetchForIncludesHelperMixin,

0 commit comments

Comments
 (0)