在我正在编写的应用程序中,我有3个模型:Player
,Plan
和Coach
。
它们是如此相关:
Player
可以包含多个Plan
个,但每个Plan
都与Player
相关
只有一个Plan
。 Coach
可以包含多个Coach
和一个Plan
可以有很多Coach
个。 (例如Plan
可能会合作为Player
s提出Plan
。)这两种关系的建模本身看起来非常清楚:第一种是一对多关系,其中Player
有Plan
的外键,第二种是Coach
和Coach
之间的多对多关系。
但是,这些模型之间存在第三种较为柔和的关系:Player
指导多个Player
,而Coach
可以有多个Coach
s,但 Player
的{{1}}集Player
集将永远是Coach
所有Plan
ManyToMany
的{{1}}集合through
}秒。 这种关系我不确定如何最好地建模。
这与定义的Plan
模型(Plans
是直通模型)的Coaches
关系感觉相似,但事实是through
到ForeignKey
由于Django documentation似乎引用players
模型必须对每个模型都有一个Coach
,因此多对多会让人感到困惑。
我也在使用Django Rest Framework,并且在一天结束时我想要的结果是能够在每个返回的Player
上包含属性ManyToMany
。此属性是Coach
ID的JSON数组。
为此,似乎可以在Player
和Serializer#create
之间定义直接Serializer#update
,然后覆盖Plan
和{{1}对于Player
,只需抓取并更新与创建或更新的Coach
相关联的每个Plan
上的players
。然后,我可以将Serializer
字段添加到Coach
的{{1}}。然而,这确实看起来有点复杂和过于复杂,这使我怀疑有更聪明或更清洁的方法来做到这一点。 有没有人知道更标准的方法来实现这一目标?
以上是Django
中定义的更全面的建模,以防上述描述不够明确:
class Player(models.Model):
pass
class Plan(models.Model):
player = models.ForeignKey(Player, related_name='plans') # Can now do Foo.bars
coaching_team = models.ManyToManyField(Coach)
class Coach(models.Model):
pass
以下是我提出的可能过于复杂的变化模型的样子:
class Player(models.Model):
pass
class Plan(models.Model):
player = models.ForeignKey(Player, related_name='plans') # Can now do Foo.bars
coaching_team = models.ManyToManyField(Coach)
class Coach(models.Model):
players = models.ManyToManyField(Player)
答案 0 :(得分:1)
如果Coach's
Players
被定义为与她Plan
相关联的那些,那么除了模型之外没有任何其他内容;你已经拥有了所需的信息。
坚持使用原始建模。要获得与ids
相关联的所有Players
的{{1}},您只需执行以下操作:
coach