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