当我删除孩子时,Django被删除了父关系

时间:2016-06-02 09:20:45

标签: django

我有两种模式:

class One(models.Model)
    name = models.CharField()

class Two(models.Model):
    one_first = models.OneToOneField(One, related_name='first', null=True, blank=True)
    one_second = models.OneToOneField(One, related_name='second', null=True, blank=True)

当我执行two_instance.one_second.delete()时,Django会删除一个实例(我想要的),但它也会删除这两个实例。为什么删除two_instance

1 个答案:

答案 0 :(得分:1)

对于Django< 2.0,on_delete默认为CASCADE。这意味着当删除two实例时,相关的one实例也会被删除。

您可以使用on_delete的其他值来更改此行为。例如,您可以使用on_delete=models.SET_NULL,这会在删除相关对象时将一对一字段的值设置为None

在您的情况下,您有两个指向同一模型的一对一字段,因此您需要为这两个字段设置on_delete

class Two(models.Model):
    one_first = models.OneToOneField(One, on_delete=models.SET_NULL, related_name='first', null=True, blank=True)
    one_second = models.OneToOneField(One, on_delete=models.SET_NULL, related_name='second', null=True, blank=True)