@@ -57,6 +57,21 @@ class Meta:
5757 'document__gamesystem__key' : ['in' ,'iexact' ],
5858 }
5959
60+ # used in ItemViewSet and MagicItemViewSet - factored out for DRYness
61+ item_prefetch_fields = [
62+ 'armor' ,
63+ 'category' ,
64+ 'damage_immunities' ,
65+ 'damage_resistances' ,
66+ 'damage_vulnerabilities' ,
67+ 'document' ,
68+ 'weapon__properties' ,
69+ 'weapon__damage_type' ,
70+ 'weapon__document' ,
71+ 'weapon__properties__property' ,
72+ 'rarity' ,
73+ 'size' ,
74+ ]
6075
6176class ItemViewSet (EagerLoadingMixin , viewsets .ReadOnlyModelViewSet ):
6277 """
@@ -69,20 +84,20 @@ class ItemViewSet(EagerLoadingMixin, viewsets.ReadOnlyModelViewSet):
6984 filterset_class = ItemFilterSet
7085
7186 select_related_fields = ['armor' , 'weapon' ]
72- prefetch_related_fields = [
73- 'armor' ,
74- 'category' ,
75- 'damage_immunities' ,
76- 'damage_resistances' ,
77- 'damage_vulnerabilities' ,
78- 'document' ,
79- 'weapon__properties' ,
80- 'weapon__damage_type' ,
81- 'weapon__document' ,
82- 'weapon__properties__property' ,
83- 'rarity' ,
84- 'size' ,
85- ]
87+ prefetch_related_fields = item_prefetch_fields
88+
89+ class MagicItemViewSet ( EagerLoadingMixin , viewsets . ReadOnlyModelViewSet ):
90+ """
91+ list: API endpoint for returning a list of magic items.
92+
93+ retrieve: API endpoint for returning a particular magic item.
94+ """
95+ queryset = models . Item . objects . filter ( rarity__isnull = False ). order_by ( 'pk' )
96+ serializer_class = serializers . ItemSerializer
97+ filterset_class = ItemFilterSet
98+
99+ select_related_fields = [ 'armor' , 'weapon' ]
100+ prefetch_related_fields = item_prefetch_fields
86101
87102class ItemRarityViewSet (viewsets .ReadOnlyModelViewSet ):
88103 """
0 commit comments