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 здесь используется правильно, исходя из того, что мы можем видеть.

Вернуться на верх