@@ -108,6 +108,8 @@ class RelatedMixin(object):
108
108
This mixin handles all related entities, whose Serializers are declared in "related_serializers"
109
109
"""
110
110
111
+ related_filter_backends = {}
112
+
111
113
def retrieve_related (self , request , * args , ** kwargs ):
112
114
serializer_kwargs = {}
113
115
instance = self .get_related_instance ()
@@ -164,13 +166,24 @@ def get_related_instance(self):
164
166
field = parent_serializer .fields .get (field_name , None )
165
167
166
168
if field is not None :
167
- return field .get_attribute (parent_obj )
169
+ result = field .get_attribute (parent_obj )
168
170
else :
169
171
try :
170
- return getattr (parent_obj , field_name )
172
+ result = getattr (parent_obj , field_name )
171
173
except AttributeError :
172
174
raise NotFound
173
175
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
+
174
187
175
188
class ModelViewSet (AutoPrefetchMixin ,
176
189
PrefetchForIncludesHelperMixin ,
0 commit comments