55from  api_v2  import  models 
66from  api_v2  import  serializers 
77
8+ from  .mixins  import  EagerLoadingMixin 
89
910class  CreatureFilterSet (FilterSet ):
1011    '''This is the filterset class for creatures.''' 
@@ -56,7 +57,7 @@ class Meta:
5657        }
5758
5859
59- class  CreatureViewSet (viewsets .ReadOnlyModelViewSet ):
60+ class  CreatureViewSet (EagerLoadingMixin ,  viewsets .ReadOnlyModelViewSet ):
6061    """ 
6162    list: API endpoint for returning a list of creatures. 
6263    retrieve: API endpoint for returning a particular creature. 
@@ -65,38 +66,22 @@ class CreatureViewSet(viewsets.ReadOnlyModelViewSet):
6566    serializer_class  =  serializers .CreatureSerializer 
6667    filterset_class  =  CreatureFilterSet 
6768
68-     def  get_queryset (self ):       
69-         depth  =  int (self .request .query_params .get ('depth' , 0 )) # get 'depth' from query params 
70-         return  CreatureViewSet .setup_eager_loading (super ().get_queryset (), self .action , depth )
71- 
72-     @staticmethod  
73-     def  setup_eager_loading (queryset , action , depth ):
74-         # Apply select_related and prefetch_related based on action and depth 
75-         if  action  ==  'list' :
76-             selects  =  [
77-                 'document' ,
78-                 'document__gamesystem' ,
79-                 'document' ,
80-                 'document__publisher' ,
81-                 'size' ,
82-                 'type' ,
83-             ]
84-             
85-             # Many-to-many and reverse relationships for prefetching 
86-             prefetches  =  [
87-                 'creatureaction_set' ,
88-                 'condition_immunities' ,
89-                 'damage_immunities' ,
90-                 'damage_resistances' ,
91-                 'damage_vulnerabilities' ,
92-                 'environments' ,
93-                 'languages' ,
94-                 'languages__document' ,
95-                 'traits' 
96-             ] 
97- 
98-             queryset  =  queryset .select_related (* selects ).prefetch_related (* prefetches )
99-         return  queryset 
69+     prefetch_related_fields  =  [
70+         'condition_immunities' ,
71+         'creatureaction_set' ,
72+         'damage_immunities' ,
73+         'damage_resistances' ,
74+         'damage_vulnerabilities' ,
75+         'document' ,
76+         'document__gamesystem' ,
77+         'document__publisher' ,
78+         'environments' ,
79+         'languages' ,
80+         'languages__document' ,
81+         'type' ,
82+         'size' ,
83+         'traits' ,
84+     ]
10085
10186
10287class  CreatureTypeFilterSet (FilterSet ):
0 commit comments