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