2016-11-23 2 views
0

Я делаю аудиоплеер в джанго. Когда я удаляю песни в списке воспроизведения, песня удаляется даже из базы данных Song. Я хотел бы удалить песню только из плейлиста, а не из базы данных песен. Но если песня удаляется из базы данных песен, все ее экземпляры в списках воспроизведения также должны быть удалены.Исходные объекты удаляются при удалении внешнего ключа в модели 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") 

ответ

-1

Удалить модель PlaylistTrack вообще; в этом нет необходимости. По вашему мнению сделать:

p.songs.remove(s) 
+0

Как насчет «сквозного» во многих местах? –

+0

Удалите его. Если вы не делаете ничего особенного в сквозной модели, нет смысла иметь ее. –

+0

Идея взята из http://stackoverflow.com/questions/4799378/best-way-to-make-a-simple-orderable-playlist-in-django. Есть ли способ сделать это с помощью той же схемы? –

0
  1. Согласно django documentation ссылочных объектов не получают удалены, когда вы делаете obj.fkfield.remove(ref_obj). Должен быть некоторый дополнительный код python (возможно, m2m_changed), который не размещен здесь и создает некоторые побочные эффекты.
  2. Как только вы удаляете объект Song, все ссылки на этот товар в объектах Playlist будут удалены автоматически.

P.S. Этот вид и модели звучат как идеальный случай для unittests.

Смежные вопросы