我有一个与相关Tournament
相关的Standings
模型:
class Tournament(models.Model):
standings = models.ForeignKey('Standings', blank=True, null=True)
我只是做了以下事情:
standings = Standings.objects.get(pk=pk)
standings.delete()
并且它也删除了相关的比赛。这应该不会发生,因为
standings
是可为空的字段。为什么会发生这种情况,我该怎么做才能防止这种情况再次发生?
最佳答案
Django 1.8默认为CASCADE
:
删除ForeignKey
引用的对象时,默认情况下Django会模拟SQL
约束ON DELETE CASCADE
的行为,并且还会删除包含ForeignKey
的对象。
要更改该行为,您应该添加on_delete
参数(自Django 2.x开始是必需的),如下所示:
standings = models.ForeignKey(
'Standings', blank=True, null=True, on_delete=models.SET_NULL)