Django中多个多对多关系引用同一模型的问题

2 投票
2 回答
1381 浏览
提问于 2025-04-15 19:31

我有一个模型,它和另一个模型之间有很多对多的关系,具体情况如下:

class Match(models.Model):
"""Model docstring"""
   Match_Id = models.AutoField(primary_key=True)
   Team_one = models.ManyToManyField('Team',related_name='Team one',symmetrical=False,) 
   Team_two = models.ManyToManyField('Team',related_name='Team two',symmetrical=False,) 
   stadium = models.CharField(max_length=255, blank=True)
   Start_time = models.DateTimeField(auto_now_add=False, auto_now=False, blank=True, null=True)
   Rafree = models.CharField(max_length=255, blank=True)
   Judge = models.CharField(max_length=255, blank=True)
   winner = models.ForeignKey('Team', related_name='winner',to_field='Team_Name')    
   updated = models.DateTimeField('update date', auto_now=True )
   created = models.DateTimeField('creation date', auto_now_add=True )

那么,像这样的模型最好的实现方式是什么呢?虽然在执行syncdb的时候,Django并不会报错,但是一旦执行后,就会出现错误,提示说 没有与给定键匹配的唯一约束

2 个回答

1

related_name属性中使用空格让我有点不安,但我觉得真正的问题可能和winner字段的to_field属性有关。根据我的了解,你只能将数据库关系设置在unique字段上。用一个可能不是唯一的字段去关联另一个对象,这样做其实没有什么意义。

我不太明白你想通过这个特定字段来实现什么。通常我们是通过主键字段来连接模型的。这样做仍然可以访问关联对象的其他字段。

1

你确定 Team_oneTeam_two 应该是多对多的关系吗?其实一场比赛每边只会有一个队伍,这样的话它们应该都是外键。

撰写回答