У меня есть класс Person, класс Project и класс Contract. Один проект ведет к контракту, в котором люди наняты. Теперь я хочу класс с людьми, связанных с их контрактами, поэтому я создать еще один класс, ContractStaff для того, чтобы реализовать через отношения:Django через отношения
class Person(models.Model):
name = CharField
adress = CharField
#contract_staff is a list of all the Contracts a single Person object has
contract_staff = ManyToManyField(Contract, through = 'ContractStaff')
class ContractStaff(models.Model):
person = ForeignKeyField(Person)
class Contract(models.Model):
id_ref = IntegerField
starting_date = DateField
ending_date = DateField
contract_staff = ForeignKey(ContractStaff)
project = OneToOneField(Project)
class Project(models.Model):
title = CharField
id_ref = IntegerField
...
Дело в том, что я видел в других примерах, что это промежуточный класс который имеет два FK, в моем примере есть класс Contract, который имеет один из них, связывающий два других класса. Поскольку ContractStaff может иметь много контрактов, а один контракт имеет только один контрактный контракт, я думаю, что поле FK должно идти в классе контракта. Я ошибаюсь? Правильно ли эта модель?
Я не думаю, что это имеет смысл, но трудно сказать, потому что непонятно, что такое классы. Что такое штат сотрудников? Это сотрудник? Аналогично, что такое экземпляр ContractStaff? И что на самом деле обозначают отношения «многие ко многим»? –
Я редактировал, я надеюсь, что это яснее. – loar
Не совсем. Зачем вам контракт ContractStaff? ForeignKey может перейти прямо из Контракта в Личность, и в этом случае 'person.contract_set.all()' будет списком всех контрактов, которые имеет один человек. –