Django:为什么一些模型领域相互冲突?

问题:

我想创建一个包含2个链接到用户的对象。例如:

class GameClaim(models.Model):
    target = models.ForeignKey(User)
    claimer = models.ForeignKey(User)
    isAccepted = models.BooleanField()

但运行服务器时我收到以下错误:

  •  

    Accessor for field ‘target’ clashes with related field ‘User.gameclaim_set’. Add a related_name argument to the definition for ‘target’.

  •  

    Accessor for field ‘claimer’ clashes with related field ‘User.gameclaim_set’. Add a related_name argument to the definition for ‘claimer’.

你能解释为什么我得到错误和如何解决它们?

回答:

用户有两个外键。 Django自动创建从用户返回到GameClaim的反向关系,通常是gameclaim_set。但是,由于您有两个FK,因此您将拥有两个gameclaim_set属性,这显然是不可能的。所以你需要告诉Django用于反向关系的名字。
使用FK定义中的related_name属性。例如

class GameClaim(models.Model):
    target = models.ForeignKey(User, related_name='gameclaim_targets')
    claimer = models.ForeignKey(User, related_name='gameclaim_users')
    isAccepted = models.BooleanField()

 
 Code问答: codewenda.com
Stackoverflow:Django: Why do some model fields clash with each other?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 4 =