当我删除孩子时,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?

最佳答案 对于Django< 2.0,
on_delete默认为CASCADE.这意味着当删除两个实例时,也会删除相关的一个实例.

您可以通过为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)
点赞