代码之家  ›  专栏  ›  技术社区  ›  dabadaba

删除可空字段正在删除相关对象

  •  1
  • dabadaba  · 技术社区  · 7 年前

    我有一个 Tournament 相关模型 Standings :

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

    我刚刚做了以下工作:

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

    同时也删除了相关的锦标赛。这不应该发生,因为 standings 是可以为空的字段。

    为什么会发生这种情况?我该怎么做才能防止这种情况再次发生?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Selcuk    7 年前

    Django 1.8默认为 CASCADE :

    当一个对象被 ForeignKey 被删除,Django默认模拟 SQL 约束 ON DELETE CASCADE 同时删除包含 外键 .

    要更改该行为,应添加 on_delete 参数(自Django 2.x起强制)如下:

    standings = models.ForeignKey(
        'Standings', blank=True, null=True, on_delete=models.SET_NULL)