Django-删除ForeignKey时删除数据库条目



我很难解决这个问题,尽管我认为我理解on_delete函数。

我有一个叫Project的模型和一个叫UserProject的模型。在Userproject中,我有两个外键指向一个User和一个Project。

我尝试的是在项目外键上使用on_delete=CASCADE。这似乎只影响Userproject模型中的Project字段。因此,当我删除一个也有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

您可能正在从Userproject属性中删除project属性,但没有删除Project本身。尝试从管理面板中删除Project对象,如果存在关联的级联对象,则它们应显示在删除确认页面上。

由于project属性可以设置为null,这似乎描述了您看到的行为。根据我们所看到的,这里正确地使用了CASCADE

最新更新