Django禁用设置文件中的级联删除功能

时间:2018-09-17 06:14:02

标签: python django django-models

我只是注意到删除与自己有关联的对象也会导致删除相关对象:

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})

我想从settings.py 更改此行为 ,这不会删除伙伴,仅删除原始对象并将关系设置为NULL。 / p>

我该如何实现?

Django:1.9.x 的Python:3.4.5 PostgreSQL:9.4.x

非常感谢。

1 个答案:

答案 0 :(得分:1)

on_delete参数指定为DO_NOTHING

class STH(models.Model):
    ...
    partner = models.ForeignKey(STH, on_delete=models.DO_NOTHING, blank=True, null=True)


更新
@Kevin Christopher Henry所述,您可以将其设置为SET_NULL ,因为您已使用null=True 定义了FK关系

  

是否可以通过使用settings.py来做到?

AFAIK,您不能这样做,因为它是数据库更改命令(内部)。因此,您应该编辑所有必需的模型并迁移以获得所需的结果