我有两种模式:
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
?
答案 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)