【问题标题】:Deleting nullable field is deleting related objects删除可为空的字段正在删除相关对象
【发布时间】:2019-01-21 11:59:34
【问题描述】:

我有一个Tournament 模型和相关的Standings

class Tournament(models.Model):
    standings = models.ForeignKey('Standings', blank=True, null=True)

我刚刚做了以下事情:

standings = Standings.objects.get(pk=pk)
standings.delete()

它还删除了相关的锦标赛。这不应该发生,因为standings 是一个可为空的字段。

为什么会发生这种情况,我能做些什么来防止这种情况再次发生?

【问题讨论】:

    标签: python django django-1.8


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2014-10-06
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多