Skip to content

Commit 7f3a1a9

Browse files
committed
traits now returned by v2 creatures endpoint
1 parent a877c84 commit 7f3a1a9

File tree

7 files changed

+81
-43
lines changed

7 files changed

+81
-43
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.1.2 on 2024-11-17 11:58
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('api_v2', '0015_creature_environments'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='creaturetrait',
16+
name='parent',
17+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='traits', to='api_v2.creature'),
18+
),
19+
]

api_v2/models/creature.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,8 @@ class CreatureTrait(Modification):
291291
It inherits from modification, which is an abstract concept.
292292
"""
293293
key = key_field()
294-
parent = models.ForeignKey('Creature', on_delete=models.CASCADE)
295-
294+
parent = models.ForeignKey(Creature, on_delete=models.CASCADE, related_name="traits")
295+
296296

297297
class CreatureSet(HasName, FromDocument):
298298
"""Set that the creature belongs to."""

api_v2/serializers/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .creature import CreatureSerializer
2525
from .creature import CreatureTypeSerializer
2626
from .creature import CreatureSetSerializer
27+
from .creature import CreatureTraitSerializer
2728

2829
from .damagetype import DamageTypeSerializer
2930

api_v2/serializers/creature.py

Lines changed: 52 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ class Meta:
4747
fields = '__all__'
4848

4949

50+
class CreatureTraitSerializer(GameContentSerializer):
51+
'''Serializer for the Creature Trait object'''
52+
key = serializers.ReadOnlyField()
53+
54+
class Meta:
55+
model = models.CreatureTrait
56+
fields = '__all__'
57+
5058
class CreatureSerializer(GameContentSerializer):
5159
'''The serializer for the Creature object.'''
5260

@@ -58,6 +66,7 @@ class CreatureSerializer(GameContentSerializer):
5866
skill_bonuses = serializers.SerializerMethodField()
5967
skill_bonuses_all = serializers.SerializerMethodField()
6068
actions = CreatureActionSerializer(many=True, context={'request': {}})
69+
traits = CreatureTraitSerializer(many=True, read_only=True)
6170
speed = serializers.SerializerMethodField()
6271
speed_all = serializers.SerializerMethodField()
6372
challenge_rating_text = serializers.SerializerMethodField()
@@ -71,47 +80,49 @@ class CreatureSerializer(GameContentSerializer):
7180
class Meta:
7281
'''Serializer meta options.'''
7382
model = models.Creature
74-
fields = [
75-
'url',
76-
'document',
77-
'key',
78-
'name',
79-
'size',
80-
'speed',
81-
'speed_all',
82-
'category',
83-
'subcategory',
84-
'type',
85-
'alignment',
86-
'languages',
87-
'armor_class',
88-
'hit_points',
89-
'hit_dice',
90-
'challenge_rating_decimal',
91-
'challenge_rating_text',
92-
'experience_points',
93-
'ability_scores',
94-
'modifiers',
95-
'saving_throws',
96-
'saving_throws_all',
97-
'skill_bonuses',
98-
'skill_bonuses_all',
99-
'passive_perception',
100-
'damage_immunities',
101-
'nonmagical_attack_immunity',
102-
'damage_resistances',
103-
'nonmagical_attack_resistance',
104-
'damage_vulnerabilities',
105-
'condition_immunities',
106-
'normal_sight_range',
107-
'darkvision_range',
108-
'blindsight_range',
109-
'tremorsense_range',
110-
'truesight_range',
111-
'actions',
112-
'creaturesets',
113-
'environments'
114-
]
83+
fields = '__all__'
84+
# fields = [
85+
# 'url',
86+
# 'document',
87+
# 'key',
88+
# 'name',
89+
# 'size',
90+
# 'speed',
91+
# 'speed_all',
92+
# 'category',
93+
# 'subcategory',
94+
# 'type',
95+
# 'alignment',
96+
# 'languages',
97+
# 'armor_class',
98+
# 'hit_points',
99+
# 'hit_dice',
100+
# 'challenge_rating_decimal',
101+
# 'challenge_rating_text',
102+
# 'experience_points',
103+
# 'ability_scores',
104+
# 'modifiers',
105+
# 'saving_throws',
106+
# 'saving_throws_all',
107+
# 'skill_bonuses',
108+
# 'skill_bonuses_all',
109+
# 'passive_perception',
110+
# 'damage_immunities',
111+
# 'nonmagical_attack_immunity',
112+
# 'damage_resistances',
113+
# 'nonmagical_attack_resistance',
114+
# 'damage_vulnerabilities',
115+
# 'condition_immunities',
116+
# 'normal_sight_range',
117+
# 'darkvision_range',
118+
# 'blindsight_range',
119+
# 'tremorsense_range',
120+
# 'truesight_range',
121+
# 'actions',
122+
# 'traits',
123+
# 'creaturesets',
124+
# 'environments'
125+
# ]
115126

116127
@extend_schema_field(inline_serializer(
117128
name="ability_scores",

api_v2/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
router.register(r'skills',views.SkillViewSet)
3535
router.register(r'rules', views.RuleViewSet)
3636
router.register(r'rulesets', views.RuleSetViewSet)
37+
router.register(r'creaturetraits', views.CreatureTraitViewSet)
3738

3839
search_router = routers.DefaultRouter()
3940
search_router.register('',views.SearchResultViewSet, basename='search')

api_v2/views/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .creature import CreatureFilterSet, CreatureViewSet
66
from .creature import CreatureTypeViewSet
77
from .creature import CreatureSetViewSet
8+
from .creature import CreatureTraitViewSet
89

910
from .document import DocumentViewSet
1011
from .document import GameSystemViewSet

api_v2/views/creature.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,8 @@ class CreatureSetViewSet(viewsets.ReadOnlyModelViewSet):
130130
queryset = models.CreatureSet.objects.all().order_by('pk')
131131
serializer_class = serializers.CreatureSetSerializer
132132
filterset_class = CreatureSetFilterSet
133+
134+
135+
class CreatureTraitViewSet(viewsets.ReadOnlyModelViewSet):
136+
queryset = models.CreatureTrait.objects.all().order_by('pk')
137+
serializer_class = serializers.CreatureTraitSerializer

0 commit comments

Comments
 (0)