Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用唱片集自动添加歌曲_Python_Django_Django Models - Fatal编程技术网

Python 使用唱片集自动添加歌曲

Python 使用唱片集自动添加歌曲,python,django,django-models,Python,Django,Django Models,我想制作一个基于Django的音乐库。所以,我有歌曲的基本模型,“商店”应用程序中的专辑和用户收藏的复制模型。我想知道,当用户创建某张专辑的副本时,有没有办法添加与该专辑相关的歌曲 商店应用程序的基本模型: class Album(models.Model): artist = models.ForeignKey(Artist) name = models.CharField(max_length=128) year = models.IntegerField(defau

我想制作一个基于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 ...

您可以将此功能添加到实际创建相册副本的方法中;但是你为什么要复制歌曲呢?您已经可以通过
copy\u album.album.song\u set
@Selcuk访问所有歌曲,从相册中删除一些歌曲怎么样?当我通过唱片副本删除歌曲时,它会从原始唱片中删除歌曲吗?