@@ -16,12 +16,13 @@ class ArmorSerializer(GameContentSerializer):
1616 key = serializers .ReadOnlyField ()
1717 ac_display = serializers .ReadOnlyField ()
1818 category = serializers .ReadOnlyField ()
19+ document = DocumentSummarySerializer ()
1920
2021 class Meta :
2122 model = models .Armor
2223 fields = '__all__'
2324
24- class ArmorSummarySerializer (serializers . ModelSerializer ):
25+ class ArmorSummarySerializer (GameContentSerializer ):
2526 '''
2627 A slightly slimmer ArmorSerializer, designed to serialize Armor FKs on
2728 other serializers. ie. The `armor` field on the ItemSerializer. Not
@@ -44,6 +45,7 @@ class Meta:
4445
4546class WeaponSerializer (GameContentSerializer ):
4647 key = serializers .ReadOnlyField ()
48+ document = DocumentSummarySerializer ()
4749 damage_type = DamageTypeSummarySerializer ()
4850 is_versatile = serializers .ReadOnlyField ()
4951 is_martial = serializers .ReadOnlyField ()
@@ -63,26 +65,84 @@ class Meta:
6365 def get_distance_unit (self , Weapon ):
6466 return Weapon .get_distance_unit
6567
68+ class WeaponSummarySerializer (GameContentSerializer ):
69+ '''
70+ A (slightly) more slender version of the WeaponSerializer. Designed for
71+ serializing FKs to the Weapons table in other serializers – ie. the
72+ `"weapon"` field on the ItemSerializer
73+ '''
74+ damage_type = DamageTypeSummarySerializer ()
75+ is_versatile = serializers .ReadOnlyField ()
76+ is_martial = serializers .ReadOnlyField ()
77+ is_melee = serializers .ReadOnlyField ()
78+ is_finesse = serializers .ReadOnlyField ()
79+ ranged_attack_possible = serializers .ReadOnlyField ()
80+ range_melee = serializers .ReadOnlyField ()
81+ is_reach = serializers .ReadOnlyField ()
82+ properties = serializers .ReadOnlyField ()
83+ distance_unit = serializers .SerializerMethodField ()
84+
85+ class Meta :
86+ model = models .Weapon
87+ fields = [
88+ 'name' ,
89+ 'key' ,
90+ 'url' ,
91+ 'damage_type' ,
92+ 'damage_dice' ,
93+ 'versatile_dice' ,
94+ 'is_versatile' ,
95+ 'reach' ,
96+ 'is_reach' ,
97+ 'is_finesse' ,
98+ 'range' ,
99+ 'range_melee' ,
100+ 'long_range' ,
101+ 'ranged_attack_possible' ,
102+ 'is_thrown' ,
103+ 'is_two_handed' ,
104+ 'requires_ammunition' ,
105+ 'requires_loading' ,
106+ 'is_heavy' ,
107+ 'is_light' ,
108+ 'is_lance' ,
109+ 'is_net' ,
110+ 'is_melee' ,
111+ 'is_simple' ,
112+ 'is_martial' ,
113+ 'is_improvised' ,
114+ 'properties' ,
115+ 'distance_unit' ,
116+ ]
117+
118+ @extend_schema_field (OpenApiTypes .STR )
119+ def get_distance_unit (self , Weapon ):
120+ return Weapon .get_distance_unit
66121
67- class ItemRaritySerializer (serializers . ModelSerializer ):
122+ class ItemRaritySerializer (GameContentSerializer ):
68123 class Meta :
69124 model = models .ItemRarity
70125 fields = ['name' , 'url' , 'key' , 'rank' ]
71126
72- class ItemCategorySerializer (serializers . ModelSerializer ):
127+ class ItemCategorySerializer (GameContentSerializer ):
73128 key = serializers .ReadOnlyField ()
129+ document = DocumentSummarySerializer ()
130+ class Meta :
131+ model = models .ItemCategory
132+ fields = '__all__'
74133
134+ class ItemCategorySummarySerializer (GameContentSerializer ):
75135 class Meta :
76136 model = models .ItemCategory
77- fields = "__all__"
137+ fields = [ 'name' , 'key' , 'url' ]
78138
79139class ItemSerializer (GameContentSerializer ):
80140 key = serializers .ReadOnlyField ()
81141 is_magic_item = serializers .ReadOnlyField ()
82- weapon = WeaponSerializer ()
142+ weapon = WeaponSummarySerializer ()
83143 armor = ArmorSummarySerializer ()
84144 document = DocumentSummarySerializer ()
85- category = ItemCategorySerializer ()
145+ category = ItemCategorySummarySerializer ()
86146 rarity = ItemRaritySerializer ()
87147 damage_immunities = DamageTypeSummarySerializer (many = True )
88148 size = SizeSummarySerializer ()
@@ -96,11 +156,16 @@ class Meta:
96156 model = models .Item
97157 fields = '__all__'
98158
159+ class ItemSummarySerializer (GameContentSerializer ):
160+ class Meta :
161+ model = models .Item
162+ fields = ['name' , 'key' , 'url' ]
163+
99164
100165
101166class ItemSetSerializer (GameContentSerializer ):
102167 key = serializers .ReadOnlyField ()
103- items = ItemSerializer (many = True , read_only = True , context = { 'request' :{}} )
168+ items = ItemSummarySerializer (many = True , read_only = True )
104169
105170 class Meta :
106171 model = models .ItemSet
0 commit comments