1

在我的项目中,我通过第三个模型 ABMapping 使用 GenericRelation 将从 A 类继承的模型映射到 B 类型的模型。

模型.py:

class A(models.Model):
    b = GenericRelation(B)

    class Meta:
        abstract = True

class ABMapping(models.Model):
    b = models.ForeignKey(B)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

class B(models.Model):
    x = ...
    y = ...

在 Django 管理员中,当我尝试删除 A 的子对象时,我收到错误消息“无法将关键字 u'object_id' 解析为字段。选择是:x、y、id、abmapping。” 似乎它试图从 ABMapping 中获取一个字段,但在 B 中找到它。

如您所见,我将模型精简到最低限度,但问题仍然存在。

即使我删除了 A 的子类的对象的所有 ABMappings,也会出现同样的问题。

StackOverflow 上所有看似相关的问题都与人们抱怨没有发生级联删除有关……但我什至无法进行顶级删除。

这些模型的一切都运行良好一段时间......除了这个从管理员删除的问题,它从一开始就没有工作。我在这里想念什么?

谢谢!

4

1 回答 1

3

您的 A 模型与 B 没有关系,它与 ABMapping 有关系。所以 A 中的关系应该是GenericRelation(ABMapping)

存在使用另一个模型作为连接表的多对多关系的概念,但是一个需要一个带有 through=ABMapping 参数的实际 ManyToManyField,以及两个,我不相信如果其中一个可以工作两个外键是一个GenericForeignKey。

于 2016-12-15T09:30:02.770 回答