小编典典

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

all

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

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

但是在运行服务器时出现以下错误:

  • 字段“目标”的访问器与相关字段“User.gameclaim_set”发生冲突。将related_name 参数添加到“目标”的定义中。

  • 字段“claimer”的访问器与相关字段“User.gameclaim_set”发生冲突。在“claimer”的定义中添加一个related_name 参数。

您能否解释一下为什么我会收到错误以及如何修复它们?


阅读 184

收藏
2022-08-15

共1个答案

小编典典

您有两个用户的外键。Django 自动创建从 User 到 GameClaim 的反向关系,通常是gameclaim_set. 但是,因为您有两个
FK,所以您将有两个gameclaim_set属性,这显然是不可能的。所以你需要告诉 Django 为反向关系使用什么名字。

使用related_nameFK 定义中的属性。例如

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