我想创建一个包含2个用户链接的对象。例如:
class GameClaim(models.Model):
target = models.ForeignKey(User)
claimer = models.ForeignKey(User)
isAccepted = models.BooleanField()
但是在运行服务器时,我得到了以下错误:
字段'target‘的
字段“”claimer“”的
你能解释一下为什么我收到这些错误,以及如何修复它们吗?
发布于 2009-07-17 10:20:49
您对User有两个外键。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()
发布于 2009-07-17 10:19:14
User
模型试图创建两个具有相同名称的字段,一个用于将该User
作为target
的GameClaims
,另一个用于将该User
作为claimer
的GameClaims
。这是Django的docs on related_name
,它允许您设置属性的名称,以便自动生成的属性不会发生冲突。
发布于 2010-08-19 07:48:31
该操作没有使用抽象基类...但如果你这样做了,你会发现在FK中硬编码related_name (例如,related_name="myname")会导致许多这样的冲突错误-从基类继承的每个类都会产生一个冲突错误。下面提供的链接包含变通方法,它很简单,但绝对不明显。
从django文档..。
如果在ForeignKey或ManyToManyField上使用related_name属性,则必须始终为该字段指定唯一的反向名称。这通常会在抽象基类中引起问题,因为该类上的字段包含在每个子类中,每次的属性值(包括related_name)都完全相同。
更多信息here。
https://stackoverflow.com/questions/1142378
复制相似问题