gpt4 book ai didi

带有两个通用(content_type)外键的 django 模型?

转载 作者:行者123 更新时间:2023-12-03 18:31:10 27 4
gpt4 key购买 nike

我正在尝试在两个通用 (content_type) 引用之间创建一个映射表,一个用于“代理”,另一个用于“资源”。

所以我采用通常的方式制作通用外键:

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
resource = generic.GenericForeignKey('content_type', 'object_id')

我试着用两个做一个模型。
agent_content_type = models.ForeignKey(ContentType)
agent_object_id = models.PositiveIntegerField()
agent = generic.GenericForeignKey('agent_content_type', 'agent_object_id')

resource_content_type = models.ForeignKey(ContentType)
resource_object_id = models.PositiveIntegerField()
resource = generic.GenericForeignKey('resource_content_type', 'resource_object_id')

但这现在引发了以下错误:

myapp.mymodel: Accessor for field 'resource_content_type' clashes with related field 'ContentType.mymodel_set'. Add a related_name argument to the definition for 'resource_content_type'.



和代理类似。

这里发生了什么?我该怎么办?

干杯

菲尔

最佳答案

您是否尝试过执行错误消息告诉您的操作 - 添加 related_name 参数?

agent_content_type = models.ForeignKey(ContentType, related_name='mymodel_agent')

编辑:
之所以会出现这种情况,是因为每次定义外键时,Django 都会自动给目标模型一个属性来进行反向查找。默认情况下,它给出相关表的名称 + '_set' - 所以如果你的 article表有一个 FK 到 section , section会得到一个 article_set反向查找的属性。

现在,如果您在同一模型中有两个 FK 指向同一目标模型,Django 将尝试为它们提供 foo_set属性,导致冲突。因此出现错误消息,它告诉您手动设置 related_name 属性。

关于带有两个通用(content_type)外键的 django 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com