簡體   English   中英

Django - 刪除外鍵時刪除數據庫條目

[英]Django - Delete db entry when ForeignKey was deleted

我在解決這個問題時遇到了麻煩,盡管我認為我理解 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

看來你可能會刪除project從屬性Userproject屬性,但不能刪除Project本身。 嘗試從管理面板中刪除Project對象,如果有關聯的級聯對象,它們應該顯示在刪除確認頁面上。

由於project屬性可以設置為空,這似乎描述了您所看到的行為。 根據我們所見,這里正確使用了CASCADE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM