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

时间:2012-09-14 08:24:25

标签: python django django-signals

在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 个答案:

答案 0 :(得分:0)

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