python - 自动添加专辑歌曲

标签 python django django-models

我想制作一个基于 Django 的音乐库。所以,我有基本的歌曲模型,“商店”应用程序中的专辑和用户收藏的复制模型。请问有什么方法可以在用户创建专辑副本时添加与专辑相关的歌曲吗?

商店应用程序的基本模型:

class Album(models.Model):
    artist = models.ForeignKey(Artist)
    name = models.CharField(max_length=128)
    year = models.IntegerField(default=timezone.now().year)
    genre = models.ForeignKey(Genre)
    songs = models.ManyToManyField('Song', blank=True)
    cover = models.ImageField(upload_to=cover_album_directory_path)

    is_single = models.BooleanField()
    is_ep = models.BooleanField()
    is_compilation = models.BooleanField()

    def __str__(self):
        return self.name


class Song(models.Model):
    artist = models.ForeignKey(Artist)
    related_album = models.ForeignKey(Album)
    album_position = models.IntegerField()
    name = models.CharField(max_length=128)

    lyrics = models.TextField(blank=True)
    track = models.FileField(upload_to=song_directory_path)

    def __str__(self):
        return self.name

专辑和歌曲副本的模型:

class CopyAlbum(models.Model):
    owner = models.ForeignKey(Library)
    album = models.ForeignKey(Album, blank=True)

    def __str__(self):
        return self.album.name

class CopySong(models.Model):
    owner = models.ForeignKey(Library)
    song = models.ForeignKey(Song, blank=True)

    def __str__(self):
        return self.song.name

我真正需要的是:创建复制专辑后,Django 必须自动保存与专辑相关的复制歌曲。

谢谢你的帮助。

最佳答案

您可以使用信号。

在 CopyAlbum、CopySong 模型文件中:

from django.db.models.signals import post_save,post_delete
from django.dispatch import receiver

@receiver(post_save,sender=CopyAlbum)
def copy_songs(*args,**kwargs):

 copy_album_instance = kwargs['instance']
 ... copy the songs ...

@receiver(post_delete,sender=CopyAlbum)
def delete_songs(*args,**kwargs):

 copy_album_instance = kwargs['instance'] ## deleted, an instance w/o db record
 ... delete the songs ...

关于python - 自动添加专辑歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35285416/

相关文章:

python - cross_validation模块是否从sklearn中删除了?如果是,从哪个版本开始?

python - 创建新列时索引会自动替换

python - 如何使 ModelSerializer DRF 中的 ListField 不强制

django:如何为模型管理 Hook 保存按钮?

python - 不包括带有 @property 字段的 model_to_dict()

python - Databricks API 2.0 - 创建 secret 范围 - TEMPORARILY_UNAVAILABLE

python - GraphQL/Graphene 用于 Django 模板中的后端调用

mysql - Django 迁移改变选择值

django - values_list 在自定义模型字段中不使用 to_python?

python - 如何在Django中手动定义遗留数据库的一对一键