Skip to content

Commit 156082b

Browse files
committed
added CreatureLanguageSerializer/LanguageSummarySerializer for handling Creature languages
1 parent 1277f22 commit 156082b

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

api_v2/serializers/creature.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from .damagetype import DamageTypeSerializer
1111
from .condition import ConditionSerializer
1212
from .document import DocumentSummarySerializer
13-
from .language import LanguageSerializer
13+
from .language import LanguageSummarySerializer
1414
from .environment import EnvironmentSerializer
1515
from .size import SizeSerializer
1616
from drf_spectacular.utils import extend_schema_field, inline_serializer
@@ -56,6 +56,14 @@ class Meta:
5656
model = models.CreatureTrait
5757
fields = '__all__'
5858

59+
class CreatureLanguageSerializer(GameContentSerializer):
60+
as_string = serializers.CharField(source="languages_desc")
61+
data = LanguageSummarySerializer(source="languages", many=True)
62+
63+
class Meta:
64+
model = models.Creature
65+
fields = ['as_string', 'data']
66+
5967
class CreatureSerializer(GameContentSerializer):
6068
'''The serializer for the Creature object.'''
6169

@@ -79,7 +87,7 @@ class CreatureSerializer(GameContentSerializer):
7987
document = DocumentSummarySerializer()
8088
type = CreatureTypeSerializer()
8189
size = SizeSerializer()
82-
languages = LanguageSerializer(many=True)
90+
languages = CreatureLanguageSerializer(source='*')
8391
environments = EnvironmentSerializer(many=True)
8492
initiative_bonus = serializers.SerializerMethodField()
8593

api_v2/serializers/language.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,14 @@ class LanguageSerializer(GameContentSerializer):
1313
class Meta:
1414
model = models.Language
1515
fields = '__all__'
16+
17+
class LanguageSummarySerializer(GameContentSerializer):
18+
"""
19+
This serializer is used for FKs to the Language model from other
20+
serializers. ie. for the languages spoken by creatures on the
21+
CreatureSerializer.
22+
"""
23+
key = serializers.ReadOnlyField()
24+
class Meta:
25+
model = models.Language
26+
fields = ['name', 'key', 'url', 'desc']

api_v2/views/creature.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class CreatureViewSet(EagerLoadingMixin, viewsets.ReadOnlyModelViewSet):
7373
'actions__attacks',
7474
'creaturesets',
7575
'condition_immunities',
76+
'condition_immunities__icon',
77+
'condition_immunities__document',
7678
'damage_immunities',
7779
'damage_resistances',
7880
'damage_vulnerabilities',
@@ -81,7 +83,6 @@ class CreatureViewSet(EagerLoadingMixin, viewsets.ReadOnlyModelViewSet):
8183
'document__gamesystem',
8284
'environments',
8385
'languages',
84-
'languages__document',
8586
'type',
8687
'size',
8788
'size__document',

0 commit comments

Comments
 (0)