Django создает переменную модели на основе другой модели

Я новичок в Django и у меня есть вопрос об архитектуре. Я не ищу готового решения, просто некоторые объяснения в простой форме, и возможно советы по архитектуре.

Я хочу создать простой помощник для классической RPG, и поэтому мне нужны три модели:

  • Фракция
  • Класс
  • Характер

А статы персонажа должны быть основаны на двух других моделях. Пример:

class Fraction(models.Model):
    describe = models.CharField(max_length=300)
    hp = models.modelIntegerField(default = 0)
    dmg = models.modelFloatField(default = 0.0)

class Char_class(models.Model):
    describe = models.CharField(max_length=300)
    hp = models.modelIntegerField(default = 0)
    dmg = models.modelFloatField(default = 0.0)
    skills = models.CharField(max_length=50)

class Character(models.Model):
    char_id = models.modelIntegerField(default = 0)
    fraction = models.ForeignKey(Fraction, on_delete=models.DO_NOTHING)
    char_class = models.ForeignKey(Char_class, on_delete=models.DO_NOTHING)
    hp = model.modelIntegerField(default = fraction.hp + char_class.hp)
    dmg = model.modelFloatField(default = fraction.dmg + char_class.dmg)

А что я хочу получить?

  • Я думал, что просто создам в админке Django какой-нибудь класс, и какую-нибудь фракцию.
  • Далее я создам несколько персонажей, просто выбирая фракции и классы из списка, и тогда hp, и dmg, должны быть суммой значений от этих двух моделей.

И я получил ошибку, что ForeignKey не имеет переменной dmg/hp. Я просто погуглил и нашел немного информации, и теперь, если я правильно понимаю, этот подход плох с самого начала. Если я правильно понимаю, модели - это просто информация для Django о том, как создавать новые таблицы в базе данных, и они не используются как стандартные классы в python (?).

Итак, мой вопрос таков:

  • Как я должен реализовать свою идею в Django?

Нужно ли мне создать всего несколько моделей без внешних ключей и как-то связать их в коде python? Или может есть какая-то хорошая практика для решения моей проблемы с использованием внешнего ключа? В конце концов (но я думаю, что это не очень хорошая идея), я могу создать одну модель, некоторые char_class и фракции в двух списках, чтобы выбрать, а затем путем if/elif/else просто добавить различные значения для hp и dmg.

Вернуться на верх