首页 > 解决方案 > 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

非常感谢。

标签: pythondjangodjango-models

解决方案


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,你不能这样做,因为它是一个数据库更改命令(内部)。因此,您应该编辑所有必需的模型并迁移以获得所需的结果


推荐阅读