【问题标题】:django having multiple one many to many relations that references same modeldjango 具有多个引用相同模型的多对多关系
【发布时间】:2010-02-20 21:19:27
【问题描述】:

我有一个模型与另一个模型有多个多对多关系,如下所示:

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 )

实现这样的模型的最佳方法是什么?尽管 django 在传递模型 sql 时不会抛出任何错误,但一旦执行了 syncdb,它就会抛出错误,说 there is no unique constraint matching given keys

【问题讨论】:

    标签: python database django django-models


    【解决方案1】:

    您确定Team_oneTeam_two 应该是ManyToMany 字段吗?当然,一场比赛的每一方只有一支球队——在这种情况下,它们都应该是外键。

    【讨论】:

    • 你说得对,应该是外键。我已将其更改为 foriegnkeys 但仍然得到相同的there is no unique constraint matching given keyserror
    【解决方案2】:

    related_name 属性中使用空格让我感到不安,但我认为真正的问题与在winner 字段上使用to_field 属性有关。据我所知,您只能将数据库关系设置为 unique 字段。使用可能不是唯一的字段与另一个对象相关是没有意义的。

    我不确定您想通过这个特定字段进行连接来实现什么目标。您通常使用主键字段连接模型。这仍然允许您访问相关对象上的任何其他字段。

    【讨论】:

    • 我实际上有winner 字段并且错误仍然存​​在问题似乎team_oneteam_two 字段与Team 模型具有相同的关系。
    • “我实际上有赢家” - 我认为你在句子中丢失了一个词。 “实际删除”?
    • 是的,很抱歉这里一大早,所以缺少东西。我删除了该字段。无论如何,我想出了问题所在。 IT 没有创建约束,因为我在删除后立即定义了一个自定义主键,它现在可以工作了。
    猜你喜欢
    • 2019-08-17
    • 2018-10-05
    • 2012-08-27
    • 2017-07-10
    • 1970-01-01
    • 2012-12-04
    • 2014-10-08
    • 2011-11-15
    • 2014-05-16
    相关资源
    最近更新 更多