我有一个与相关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)

09-12 16:14