python - Django 禁用设置文件中的级联删除
问题描述
我刚刚注意到删除与自身有关系的对象也会导致删除相关对象:
class STH(models.Model):
...
partner = models.ForeignKey(STH, blank=True, null=True)
In [1]: sth = STH.objects.get(name = 'sth01')
In [2]: sth.partner
Out[2]: <STH: sth02>
In [3]: sth.partner.partner
Out[3]: <STH: sth01>
In [4]: sth.delete()
Out[4]: (2, {'app.Disk': 0, 'app.STH': 2})
.
我想从 setting.py中改变这种行为,这不会删除伙伴,只会删除原始对象并将关系设置为 NULL 。
我怎样才能做到这一点?
Django:1.9.x Python:3.4.5 Postgresql:9.4.x
非常感谢。
解决方案
on_delete
将参数指定为DO_NOTHING
class STH(models.Model):
...
partner = models.ForeignKey(STH, on_delete=models.DO_NOTHING, blank=True, null=True)
@Kevin Christopher Henry
提到
的更新您可以将其设置为,因为您定义了您的 FK 关系SET_NULL
null=True
可以通过使用
settings.py
吗?
AFAIK,你不能这样做,因为它是一个数据库更改命令(内部)。因此,您应该编辑所有必需的模型并迁移以获得所需的结果
推荐阅读
- python - 给定 pandas df 的 numpy 数组中的字符串自动创建新数据框的名称
- discord.py - 尝试在 discord.py 中使用 discord.Server 时出错
- maven - 如何将 env var arg 传递给 maven 到 shell 脚本?
- c++ - C++ 中的动态零长度数组
- reporting-services - 如何在 SSRS 报表生成器中按日期范围分组?
- java - 服务器重置后无法通过firebase接收消息
- java - Android Firebase 通知
- javascript - 使用 AJAX 时 ReCAPTCHA 不起作用
- angular - 表单提交后渲染不同的组件Angular
- java - 在 Spark 中获取用于 Logistic 回归的 Roc 时出现 IllegalArgumentException