在 django 中删除 ForeignKey 时在相关模型上发出信号

Posted

技术标签:

【中文标题】在 django 中删除 ForeignKey 时在相关模型上发出信号【英文标题】:Signaling on related model when deleting ForeignKey in django 【发布时间】:2012-09-07 09:23:55 【问题描述】:

在 django 中,当 foreignKey 设置为 on_delete=models.SET_NULL 时,是否有任何方法可以通知相关模型的变化?

在典型情况下的第一个场景中:

class RelatedModel(models.Model):
    fKey = models.ForeignKey('ForeignModel')

class ForeignModel(models.Model):
    name = models.CharField(max_length=128)

fk = ForeignModel.objects.create(name='Test')
rm = RelatedModel()
rm.fKey = fk
rm.save()
fk.delete()

当 fk.delete() 被调用时,pre_deletepost_delete 信号将为 fkrm 对象触发。

但是,如果 RelatedModel 声明为:

class RelatedModel(models.Model):
    fKey = models.ForeignKey('ForeignModel', null=True, on_delete=SET.NULL)

我没有看到相关模型的任何信号被触发,即使它已更改(fKey 值已更改为 null)。唯一触发的信号是fk 的删除前/删除后信号。

鉴于这种情况,是否有任何方法可以表明相关模型的变化并且仍然使用on_delete=models.SET_NULL而不编写自定义方法?

【问题讨论】:

【参考方案1】:

SET_NULL 只是一个可调用的,带有一些参数。因此,您可以定义自己的 SIGNALING_SET_NULL 并发送您选择的信号。

【讨论】:

以上是关于在 django 中删除 ForeignKey 时在相关模型上发出信号的主要内容,如果未能解决你的问题,请参考以下文章

可以在 Django 中执行条件 ForeignKey.on_delete 吗?

ForeignKey null=True 时 Django 慢查询

在 Django 中,如何将 ForeignKey 传递给 Model 的实例?

当我使用 Graphene 在 Django GraphQL API 中获取对象时,如何限制 ForeignKey 字段的项目数?

如何在 Django Admin 中更改 ForeignKey 显示文本?

Django 通过 ForeignKey 反向查找