python - 级联的反向等价物是什么?

标签 python django

我正在编写一个小型音乐数据库。学习 SQL 已经很久了,我一直想尝试一下 Django。但有一件事我无法理解。

现在,我的模型只包含两个类,AlbumSongSong 有一个外键指向它所属的专辑。现在,如果我要删除那个 Album,所有“属于”它的 Song 都会由于级联效应而被删除。

专辑在我的数据库中有点虚拟,只有歌曲在文件系统上实际表示并且专辑是根据歌曲标签构建的,因此我只能知道如果没有更多歌曲指向专辑则不再存在它(因为它们不再存在于文件系统中)。

或者简而言之,如何实现反向级联,也就是说,如果没有更多歌曲指向专辑,则该专辑也应该被删除?

最佳答案

您可以使用 pre_delete当歌曲被删除并且没有更多歌曲时,发出删除专辑的信号。

from yourapp.models import Album, Song
from django.db.models.signals import pre_delete

def delete_parent(sender, **kwargs):
    # Here you check if there are remaining songs.
    ....

pre_delete.connect(delete_parent, sender=Song)

关于python - 级联的反向等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5185563/

相关文章:

python - 使用字典值更新查询集

MySQL lite django 多表

python - Django 模型 - 将附加信息传递给经理

django - 在 Python 中限制文件的生命周期

python - 在 Python 环境中安装 Scrapy 包

python - 使用 Pandas 将字符串列表转换为虚拟变量

Django Rest Framework 限制从多个序列化器中提取的项目数量

html - 避免在 django 模板 HTML 表中出现重复的 "if conditions"

python - 寻找用于捕获短语直到点的正则表达式模式

python - 设置django rest框架配置的DatetimeField格式