我有这个 models.py 的代码片段
class Provider(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING)
provider = models.CharField(max_length=100, unique=True)
active = models.BooleanField(default=True)
当我尝试删除一个对象时,我遇到一个错误:
django.db.utils.IntegrityError:外键约束失败
我在 django 2.x 上遇到了这个问题,因为在 1.11 上一切都很完美。 我做了一些搜索,发现这个问题可能会在这部分发生
on_delete=models.DO_NOTHING
,那么我怎样才能在保持一切原样的情况下解决它呢?
基本上,你是在告诉 Django 在删除用户时不执行任何操作。因此,您将尝试删除具有相关外键的行,这是预期的行为。 如果您想在用户被删除时保留提供者模型,则必须使用户可为空并使用 models.SET_NULL。 如果提供者在你的逻辑中没有意义,你可以级联。 如果您需要重新分配给默认用户,您可以使用自定义方法。
Django 在 2.0.0 版本中删除了默认的
ForeignKey.on_delete
。在此之前,默认值为 CASCADE
,在您的示例中,它会自动删除引用已删除用户的 Provider
实例。
Django 1.11 中的
将成为 Django 2.0 中的必需参数。在旧版本中,它默认为on_delete
。CASCAD
因此,要获得旧的行为,您必须将
on_delete
设置为 CASCADE
。