GenericRelation 的 Django m2m_changed 信号,有可能吗?

Posted

技术标签:

【中文标题】GenericRelation 的 Django m2m_changed 信号,有可能吗?【英文标题】:Django m2m_changed signal for GenericRelation, is it possible? 【发布时间】:2020-07-15 13:03:12 【问题描述】:

它可以用于泛型关系吗?我没有在文档中看到它。

获得直通表的天真尝试:

In [4]: Asset.related_images.through
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-d541db71a7a5> in <module>()
----> 1 Asset.related_images.through

AttributeError: 'ReverseGenericManyToOneDescriptor' object has no attribute 'through'

【问题讨论】:

【参考方案1】:

不,你不能使用它。通用关系是GenericForeignKey(多对一)的反向关系,而不是多对多关系。因此,不存在链接两个模型的直通模型,而是一个模型通过 GenericForeignKey 直接链接到另一个模型。如果您想监听更改事件,您必须连接到包含 GenericForeignKey 的模型的 pre_savepost_save

您可以在自定义直通模型中使用两个 GenericForeignKey 字段构建某种通用的多对多关系,但 Django 不支持它,因此您必须自己发送信号。

【讨论】:

以上是关于GenericRelation 的 Django m2m_changed 信号,有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让石墨烯与 django GenericRelation 字段一起工作?

如何使用 GenericRelation 的逆

Django中app的model相互引用问题

django contenttype

在迁移中处理 GenericRelation 和 GenricForeignKey

django——contentType组件