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.