Django中多个多对多关系引用同一模型的问题
我有一个模型,它和另一个模型之间有很多对多的关系,具体情况如下:
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_one
和 Team_two
应该是多对多的关系吗?其实一场比赛每边只会有一个队伍,这样的话它们应该都是外键。