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

标签 python django django-signals

在 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_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 而不是编写自定义方法?

最佳答案

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

关于python - 在 Django 中删除 ForeignKey 时在相关模型上发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420672/

相关文章:

python - 如何在 Django 中将 PDFTemplateResponse 转换为类似字节的对象?

python - django 信号是否也包含在 transaction.atomic 装饰器中?

Django-什么时候应该使用信号,什么时候应该覆盖save方法?

python - Docker - 用于通过 pip 安装模块的 Python 依赖项

python - Redis 对象映射器的原子事务?

python - 顺时针对ndarray进行排序的Numpyic方法?

python - 防止在 Django 模型中删除

python - 我应该使用 sqlite3 用 python 存储用户名和密码吗?

django - django grappelli 中的自动完成 - 没有 "add"按钮

sql - Django sqlall <app> 没有返回任何东西