python - 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'.

您能否解释一下我收到错误的原因以及如何解决这些错误?

最佳答案

您有两个 User 的外键。 Django 自动创建从 User 到 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()

https://stackoverflow.com/questions/1142378/

相关文章:

python - 如何卸载使用 pip install --user 安装的软件包

python - 如何在 python 中发送带有请求的 "multipart/form-data"

linux - 如何使用 grep 在当前目录中搜索具有字符串 "hello"但仅显示 .h 和 .

linux - 如何从命令行检查 SMTP 是否正常工作(Linux)

python - 被python文件模式迷惑 "w+"

datetime - 组合 datetime.date 和 datetime.time 对象的 Py

linux - 如何通过 SSH 在 Windows 中挂载远程 Linux 文件夹?

linux - 使用 sudo 时找不到命令

linux - 进行安装,但不安装到默认目录?

python - 我如何告诉 PyCharm 参数应该是什么类型?