首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django:为什么一些模型字段会相互冲突?

Django:为什么一些模型字段会相互冲突?
EN

Stack Overflow用户
提问于 2009-07-17 09:59:09
回答 6查看 39.8K关注 0票数 179

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

代码语言:javascript
复制
class GameClaim(models.Model):
    target = models.ForeignKey(User)
    claimer = models.ForeignKey(User)
    isAccepted = models.BooleanField()

但是在运行服务器时,我得到了以下错误:

字段'target‘的

  • 访问器与相关字段’User.gameclaim_
  • ‘冲突。在‘related_name’的定义中添加一个目标参数。

字段“”claimer“”的

  • 访问器与相关字段“”user.gameclaim_
  • “”冲突。“”将related_name参数添加到‘claimer’的定义中。

你能解释一下为什么我收到这些错误,以及如何修复它们吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-17 10:20:49

您对User有两个外键。Django会自动创建一个从用户到GameClaim的反向关系,通常是gameclaim_set。但是,因为您有两个FK,所以您将有两个gameclaim_set属性,这显然是不可能的。因此,您需要告诉Django使用哪个名称来表示反向关系。

在FK定义中使用related_name属性。例如:

代码语言:javascript
复制
class GameClaim(models.Model):
    target = models.ForeignKey(User, related_name='gameclaim_targets')
    claimer = models.ForeignKey(User, related_name='gameclaim_users')
    isAccepted = models.BooleanField()
票数 299
EN

Stack Overflow用户

发布于 2009-07-17 10:19:14

User模型试图创建两个具有相同名称的字段,一个用于将该User作为targetGameClaims,另一个用于将该User作为claimerGameClaims。这是Django的docs on related_name,它允许您设置属性的名称,以便自动生成的属性不会发生冲突。

票数 8
EN

Stack Overflow用户

发布于 2010-08-19 07:48:31

该操作没有使用抽象基类...但如果你这样做了,你会发现在FK中硬编码related_name (例如,related_name="myname")会导致许多这样的冲突错误-从基类继承的每个类都会产生一个冲突错误。下面提供的链接包含变通方法,它很简单,但绝对不明显。

从django文档..。

如果在ForeignKey或ManyToManyField上使用related_name属性,则必须始终为该字段指定唯一的反向名称。这通常会在抽象基类中引起问题,因为该类上的字段包含在每个子类中,每次的属性值(包括related_name)都完全相同。

更多信息here

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1142378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档