我有两个型号:
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)