@@ -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
175188class ModelViewSet (AutoPrefetchMixin ,
176189 PrefetchForIncludesHelperMixin ,
0 commit comments