Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 747982a

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

AltStyle によって変換されたページ (->オリジナル) /