Skip to content

Commit 417e7f4

Browse files
committed
Added related fields filtering
1 parent bda8f63 commit 417e7f4

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

rest_framework_json_api/views.py

Lines changed: 16 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,25 @@ 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:
174+
from rest_framework.exceptions import MethodNotAllowed, NotFound
172175
raise NotFound
173176

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

175189
class ModelViewSet(AutoPrefetchMixin,
176190
PrefetchForIncludesHelperMixin,

0 commit comments

Comments
 (0)