Skip to main content
 首页 » 编程设计

python之在 Django 中删除 ForeignKey 时在相关模型上发出信号

2025年05月04日24mfrbuaa

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

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

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_delete 和 post_delete 信号将同时被 fk 和 rm< 触发 对象。

但是,如果 RelatedModel 声明为:

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

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

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

请您参考如下方法:

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