Если я вас правильно понимаю, вы не понимаете, что ForeignKeys и ManyToManyFields возвращают разные вещи.
ForeignKey - это отношение один-ко-многим, причем «один» находится на той стороне, на которую он указывает. Это означает, что если вы определили default_project
как ForeignKey, self.default_project
возвращает один экземпляр Project
, который вы можете использовать и назначить как любой другой экземпляр.
Однако, ManyToManyField - как следует из названия - имеет "много" отношений на обеих сторонах. Таким образом, self.project_assignments
не возвращает ни одного экземпляра, он возвращает QuerySet. Именно так Django обрабатывает списки экземпляров, извлеченных из базы данных. Таким образом, вы можете использовать add
и remove
для управления этим списком или разрезать его, чтобы получить один экземпляр.
Например, если вы хотите установить default_project
FK для первого проекта в списке назначений проекта, вы должны сделать:
self.default_project = self.project_assignments.all()[0]
(хотя в реальном коде вы должны были бы защититься от вероятности отсутствия назначений, так что это вызовет IndexError).