【发布时间】:2022-01-08 05:59:05
【问题描述】:
我们有两个 Django 模型:
class Project(models.Model):
project_title = models.CharField(max_length=30)
owner = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING)
class User(models.Model):
usernmae = models.CharField(max_length=50)
active_project = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING, related_name='current_project')
我有一个有对象的用户(id 说692)。该用户使用id=12345 创建了一个项目,因此这些owner 字段将获得此特定引用。
我想删除那个用户。但它显示错误
delete on table "app_user" violates foreign key constraint
这应该是on_delete=models.DO_NOTHING,已设置。我发现的一种方法是使用on_delete=models.CASCADE。
问题:我应该如何在不更改模型定义的情况下删除用户 (692)(必须重新运行迁移)?
通过首先删除项目手动执行此操作会导致相同的foreign-key 错误,因为owner 字段是User 对象。
删除时如何处理这种相互的外键关系,因为删除这两者中的任何一个都会引发外键异常?
更新
模型定义中的一些更正username 是字段名称而不是usernmae(错字)。项目的外键是Project 而不是User 模型。
class Project(models.Model):
project_title = models.CharField(max_length=30)
owner = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING)
class User(models.Model):
username = models.CharField(max_length=50)
active_project = models.ForeignKey(Project, null=True, on_delete=models.DO_NOTHING, related_name='current_project')
【问题讨论】:
-
可能最好的方法是在事务中执行此操作。另一种方法可能是首先将两个
ForeignKeys 之一设置为NULL。 -
在课堂上
USER真的是usernmae而不是username吗?更重要的是为什么active_project在User而不是Project上有一个FK?添加答案以更新您的问题。
标签: python django database postgresql foreign-keys