Вот сгущенное пример того, что я пытаюсь сделать:Можно ли добавить 'сквозной' образ детской модели на Django?
class Entity(models.Model):
name = models.CharField(max_length=70)
class Individual(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class BookingAgent(Entity)
staff = models.ManyToManyField(Individual, through='Role', related_name="employee")
class Role(models.Model):
person = models.ForeignKey(Individual)
company = models.ForeignKey(Entity)
position = models.CharField(max_length=70)
В принципе, у меня есть родительский класс под названием Entity
, который хранит всю базовую информацию для компании, то есть адрес, и т.д. Я тогда есть BookingAgent
, который является ребенком Entity
. Когда я пытаюсь создать сквозные отношения на модели BookingAgent
, это не сработает. Я получаю сообщение об ошибке:
'staff' is a manually-defined m2m relation through model Role, which does not have foreign keys to Individual and BookingAgent
Но он работает, когда сквозные отношения определены в модели Entity`.
Моя цель состоит в том, чтобы каждый Сущность имел список лиц, которые являются сотрудниками или членами. Кажется, я понимаю, почему он не работает, но я не могу найти элегантное решение.
Спасибо!
UPDATE: Чтобы уточнить, Entity не является абстрактным базовым классом, потому что будут какие-то лица, не являющиеся BookingAgents, ManagementCompanies, и т.д.
* Технически *, нет ничего плохого в том, что у вас есть. Если 'BookingAgent' - это' Entity', вы можете сохранить его в любом 'ForeignKey', который принимает' Entity'. Однако, поскольку Django устанавливает API M2M, это не сработает. Для того, чтобы API функционировал должным образом, он должен присоединить связанных менеджеров к обеим сторонам отношений, то есть «Индивидуальный» и «Агент бронирования», но ваш код скорее приведет к добавлению связанных менеджеров в «Индивидуал» и «Сущность». Вы можете назвать это ошибкой, но я бы предположил, что разработчики Django отметят ее WONTFIX, если вы ее отправите. –
Спасибо @ChrisPratt! Я искал менеджеров, но я все еще смущен тем, как я могу это решить. Не могли бы вы уточнить? –
Дело в том, что я не думаю, что вы * можете * решить это. Для каждой конкретной связи вам понадобится использовать другую «сквозную» модель. –