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

use*_*039 6 python django

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

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

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

或者简而言之,我怎样才能实现反向级联,也就是说,如果没有更多歌曲指向某个专辑,该专辑也应该被删除?

Fáb*_*niz 5

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)
Run Code Online (Sandbox Code Playgroud)