@@ -16,25 +16,55 @@ class Meta:
1616class  ClassFeatureColumnItemSerializer (GameContentSerializer ):
1717    class  Meta :
1818        model  =  models .ClassFeatureItem 
19-         fields  =  ['level' ,'column_value' ]
19+         fields  =  ['level' , 'column_value' ]
20+ 
21+ class  ClassFeaturePrefetchSerializer (GameContentSerializer ):
22+     class  Meta :
23+         model  =  models .ClassFeatureItem 
24+         fields  =  ['level' , 'detail' , 'column_value' ]
2025
2126class  ClassFeatureSerializer (GameContentSerializer ):
2227    key  =  serializers .ReadOnlyField ()
23-     gained_at  =  ClassFeatureItemSerializer (
24-         many = True 
25-     )
28+     feature_items  =  ClassFeaturePrefetchSerializer (many = True , read_only = True )
29+ 
30+     def  to_representation (self , instance ):
31+         # run 'to_representation' on super-class (GameContentSerializer) 
32+         representation  =  super ().to_representation (instance )
33+ 
34+         # Filters non-table data from FeatureItems 
35+         gained_at  =  [
36+             ClassFeatureItemSerializer (item ).data 
37+             for  item  in  instance .feature_items .all ()
38+             if  item .column_value  is  None 
39+         ]
40+ 
41+         # Filters table data from FeatureItems 
42+         column_data  =  [
43+             ClassFeatureColumnItemSerializer (item ).data 
44+             for  item  in  instance .feature_items .all ()
45+             if  item .column_value  is  not   None 
46+         ]
47+ 
48+         # replace 'feature_items' with 'gained_at' and 'column_data' in representation 
49+         representation ['gained_at' ] =  gained_at 
50+         representation ['column_data' ] =  column_data 
51+         del  representation ['feature_items' ]
2652
27-     table_data  =  ClassFeatureColumnItemSerializer (
28-         many = True 
29-     )
53+         return  representation 
3054
3155    class  Meta :
3256        model  =  models .ClassFeature 
33-         fields  =  ['key' , 'name' , 'desc' ,'gained_at' ,'table_data' , 'feature_type' ]
57+         fields  =  [
58+             'key' ,
59+             'name' ,
60+             'desc' ,
61+             'feature_type' ,
62+             'feature_items' 
63+         ]
3464
3565class  CharacterClassSerializer (GameContentSerializer ):
3666    key  =  serializers .ReadOnlyField ()
37-     features  =  ClassFeatureSerializer (many = True )
67+     features  =  ClassFeatureSerializer (many = True ,  read_only = True )
3868    hit_points  =  serializers .ReadOnlyField ()
3969    document  =  DocumentSummarySerializer ()
4070
0 commit comments