Модель, использующая множество моделей (Django)
У меня есть проект, в котором монстр может иметь много действий, но я не хочу связывать действие с конкретным монстром. Как я могу это сделать? Код выглядит следующим образом:
Монстры (я разделил так, чтобы можно было расширить и создать лист персонажа на основе базового листа):
from django.db import models
from actions.models import Action
# Create your models here.
from django.utils.text import slugify
class BaseSheet(models.Model):
name: str = models.CharField(max_length=50)
race: str = models.CharField(max_length=30)
size: str = models.CharField(max_length=30)
ac: int = models.IntegerField()
ac_type: str = models.CharField(max_length=20)
hp: int = models.IntegerField()
hp_dices: str = models.CharField(max_length=10)
movement: str = models.CharField(max_length=30)
strength: int = models.IntegerField()
dexterity: int = models.IntegerField()
constitution: int = models.IntegerField()
intelligence: int = models.IntegerField()
wisdom: int = models.IntegerField()
charisma: int = models.IntegerField()
languages: str = models.CharField(max_length=100, default="None")
slug: str = models.SlugField(blank=True, null=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(f'{self.name}-{self.id}')
return super().save()
class Monster(BaseSheet):
challenge: str = models.CharField(default="0", max_length=3)
description: str = models.TextField(default="")
actions = models.ForeignKey(Action, on_delete=models.DO_NOTHING)
Действие:
from django.db import models
# Create your models here.
class Action(models.Model):
name: str = models.CharField(max_length=30)
description: str = models.TextField()
is_attack: bool = models.BooleanField(default=False)
weapon_type: str = models.CharField(max_length=50, blank=True, null=True)
attack: int = models.IntegerField(blank=True, null=True)
reach: str = models.CharField(max_length=50, blank=True, null=True)
hit: int = models.IntegerField(blank=True, null=True)
hit_dice: str = models.CharField(max_length=10, blank=True, null=True)
damage_type: str = models.CharField(max_length=50, blank=True, null=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.is_attack:
self.weapon_type = None
self.attack = None
self.reach = None
self.hit = None
self.hit_dice = None
self.damage_type = None
return super().save()
Edit: Я только что перешел на ManyToManyField в Monsters, но на моем сайте, когда я обращаюсь к Actions, он показывает actions.Action.None