我在django制作音频播放器。当我删除播放列表中的歌曲时,即使从乐曲数据库中删除了该歌曲。我想只从播放列表中删除歌曲,而不是从歌曲数据库中删除。但是如果歌曲从歌曲数据库中删除,则播放列表中的所有实例也应该被删除。
models.py
class Song(models.Model):
song_title = models.CharField(max_length=250)
file = models.FileField(upload_to='/',default = "null")
class Meta:
ordering = ['song_title']
def __str__(self):
return self.song_title
class Playlist(models.Model):
name = models.CharField(max_length = 50)
songs = models.ManyToManyField(Song)
def __str__(self):
return self.name
views.py
def deleteplaylistsong(request):
if request.method == 'POST':
song = (request.POST['song'])
playlist = request.POST['playlist']
s = Song.objects.get(song_title=song)
p = Playlist.objects.get(name=playlist)
p.songs.remove(s)
return HttpResponse("success")
答案 0 :(得分:0)
obj.fkfield.remove(ref_obj)
时,参照对象不会被删除。必须有一些额外的python代码(可能是m2m_changed
信号),这些代码未在此处发布,并且会产生一些副作用。 Song
对象后,Playlist
个对象中对此项的所有引用都将自动删除。 P.S。这种视图和模型听起来像是单元测试的完美案例。
答案 1 :(得分:-1)
完全删除PlaylistTrack模型;没有必要。在你看来做:
p.songs.remove(s)