Django - 删除外键时删除数据库条目
Posted
技术标签:
【中文标题】Django - 删除外键时删除数据库条目【英文标题】:Django - Delete db entry when ForeignKey was deleted 【发布时间】:2021-12-24 03:27:15 【问题描述】:虽然我认为我理解 on_delete 函数,但我无法解决这个问题。
我有一个名为 Project 的模型和一个名为 UserProject 的模型。在 Userproject 我有两个外键指向一个用户和一个项目。
我尝试的是在项目外键上使用 on_delete = CASCADE。这似乎只影响 Userproject 模型中的 Project-field。所以当我删除一个也有 Userproject 条目的项目时,那些不会被删除。我怎样才能做到这一点?
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Project(models.Model):
id = models.AutoField(db_column = 'db_ID', primary_key = True)
name = models.CharField(max_length=500, default = None)
descriptor = models.CharField(max_length = 1000, null = True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'projects'
def __str__(self):
return self.name
class Userproject(models.Model):
id = models.AutoField(db_column = 'db_ID', primary_key = True)
user = models.ForeignKey(User, on_delete= models.SET_NULL, null = True)
project = models.ForeignKey('Project', on_delete = models.CASCADE,default = 1, null = True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null = True)
class Meta:
db_table = 'UserProjects'
def __str__(self):
return self.id
【问题讨论】:
我无法重现该错误。它已为我删除。我已经复制了你的代码并运行了 shell: > project_1 = Project.objects.create(name='project_1') > user_project_1 = Userproject.objects.create(project=project_1) > Userproject.objects.all() #您似乎正在从Userproject
属性中删除project
属性,但没有删除Project
本身。尝试从管理面板中删除Project
对象,如果有关联的级联对象,它们应该显示在删除确认页面上。
由于project
属性可以设置为空,这似乎描述了您所看到的行为。 CASCADE
在这里根据我们所看到的情况正确使用。
【讨论】:
以上是关于Django - 删除外键时删除数据库条目的主要内容,如果未能解决你的问题,请参考以下文章
当您在 Oracle 中删除附加了外键的主键约束然后重新启用主键时会发生啥?
Django - sqlclear 无法删除具有 AbstractUser 外键约束的数据库