Django - Удаление записи в базе данных, когда ForeignKey был удален
Мне трудно решить эту проблему, хотя я думал, что понял функцию on_delete.
У меня есть модель под названием Project и модель под названием UserProject. В Userproject у меня есть два внешних ключа, указывающих на User и Project.
Что я пробовал, так это использовать on_delete = CASCADE для project-Foreign Key. Похоже, что это влияет только на поле Project в модели Userproject. Поэтому, когда я удаляю проект, в котором также есть записи 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
Похоже, что вы удаляете атрибут project
из атрибута Userproject
, но не удаляете сам Project
. Попробуйте удалить объект Project
из панели администратора, если есть связанные каскадные объекты, они должны отображаться на странице подтверждения удаления.
Поскольку атрибут project
может быть установлен в null, это, похоже, описывает поведение, которое вы наблюдаете. CASCADE
здесь используется правильно, исходя из того, что мы можем видеть.