Как настроить наследование модели Django с внешним ключом - PullRequest
0 голосов
/ 08 июля 2019

У меня есть три модели, один суперкласс и два подкласса. Оба подкласса принадлежат другой модели (выражается через внешний ключ).

Я не совсем уверен, как будет выглядеть наилучшая установка в отношении моего FK? Положить ли внешний ключ в суперкласс, в подкласс или в оба? Может быть, есть также не только один способ, но несколько способов сделать это?

В каждом здании может быть много энергетических объектов, а это значит, что в нем может быть много объектов отопления и охлаждения. Каждый объект отопления / охлаждения / энергии принадлежит одному зданию. Таким образом, классические отношения «один ко многим» выражаются с помощью внешнего ключа.

Вот мои модели:

Суперкласс

class Energy(models.Model):
   year : models.BigIntegerField(...)
   value : models.IntegerField(...)
   connected_building : ForeignKey ??????

Подклассы

class Heating(Energy): 
   connected_building : ForeignKey ?????


class Cooling(Energy): 
   connected_building : ForeignKey ?????

Связанный класс

class Building(models.Model):
  name = models.Charfield(...)

Я боюсь испортить мою базу данных, поэтому любая помощь очень ценится. Заранее спасибо!

1 Ответ

2 голосов
/ 08 июля 2019

Сделайте Energy абстрактным суперклассом, где вам не придется иметь дело с отдельной таблицей энергии в базе данных.Вы можете сохранить ForeignKey для здания в модели Energy, как вы описали.Больше информации для абстрактных моделей можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...