File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -65,6 +65,30 @@ class CreatureViewSet(viewsets.ReadOnlyModelViewSet):
6565 serializer_class = serializers .CreatureSerializer
6666 filterset_class = CreatureFilterSet
6767
68+ def get_queryset (self ):
69+ # Retrieve depth from query params, default to 0 if not provided
70+ depth = int (self .request .query_params .get ('depth' , 0 ))
71+ queryset = CreatureViewSet .setup_eager_loading (super ().get_queryset (), self .action , depth )
72+ return queryset
73+
74+ @staticmethod
75+ def setup_eager_loading (queryset , action , depth ):
76+ # Apply select_related and prefetch_related based on action and depth
77+ if action == 'list' :
78+ selects = ['type' , 'size' , 'document' ]
79+
80+ # Many-to-many and reverse relationships for prefetching
81+ prefetches = [
82+ 'creatureaction_set' , 'condition_immunities' , 'damage_immunities' ,
83+ 'damage_vulnerabilities' , 'damage_resistances' , 'environments' ,
84+ 'document'
85+ ]
86+
87+ if depth >= 2 :
88+ prefetches += ['document__publisher' , 'document__licenses' , 'document__gamesystem' ]
89+ queryset = queryset .select_related (* selects ).prefetch_related (* prefetches )
90+ return queryset
91+
6892
6993class CreatureTypeFilterSet (FilterSet ):
7094 class Meta :
You can’t perform that action at this time.
0 commit comments