AttributeError: невозможно использовать remove () в ManyToManyField, который указывает промежуточную модель. Используйте вместо этого song.Playlist_Activity's Manager - PullRequest
0 голосов
/ 30 мая 2020

Я следил за документацией , чтобы выяснить, как удалить элемент в поле manytomany ниже, но это не работает, и я получаю ошибку атрибута. Метод удаления отлично работает без промежуточной модели.

models.py

   class Song (models.Model):
        author=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
        timestamp= models.DateTimeField(auto_now_add=True, editable=False)
        songname = models.CharField(max_length=500, null=False, blank=False)
        tags = TaggableManager()

        def __str__(self):
            return self.songname

    class Playlist (models.Model):
        name = models.CharField(max_length=150, null=False, blank=False)
        author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=1)
        song = models.ManyToManyField(Song, through='Playlist_Activity')


    class Playlist_Activity(models.Model):
        song= models.ForeignKey(Song, on_delete=models.CASCADE)
        playlist= models.ForeignKey(Playlist, on_delete=models.CASCADE)
        timestamp= models.DateTimeField(auto_now_add=True, editable=False)

        class Meta:
            ordering = ('timestamp',)

Views.py

@login_required
def Playlist_Remove(request, id, P_id):
    p = Playlist.objects.get(id=P_id)
    s = p.song.get(id=id)    
    p.song.remove(s)
    return redirect('account')

1 Ответ

0 голосов
/ 30 мая 2020

Вы можете удалить промежуточный экземпляр:

p = Playlist.objects.get(id=P_id)
s = Song.objects.get(id=id)
Playlist_Activity.objects.get(song=s, playlist=p).delete()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...