@bielikovv

Как добавить данные в поле ManyToManyField через представление?

Пытаюсь понять как добавить композицию(которую получаю в представлении) в поле модели плейлиста playlist_composition(ManyToManyField). Проблема в том, что как добавить, я понимаю, но в таком случае пропадают все данные, которые содержались там до этого. Как сделать не обновление этого поля в модели, а именно добавление текущей композиции к другим композициям поля? Читал документации, ответа не нашел(если в них есть ответ, дайте пожалуйста ссылку).

views.py
def add_to_playlist(request, composition_id, playlist_id):
    playlist = Playlists.objects.get(pk=playlist_id)
    composition = Composition.objects.get(pk=composition_id)
    if request.method == 'POST':
    #место, где не понимаю
    return render(request, 'musiccloud/composition_to_playlist.html', {'playlist': playlist})


models.py
class Composition(models.Model):
    composition_user = models.ForeignKey(User, verbose_name='Username', on_delete=models.CASCADE, null=True)
    composition_envelope = models.ImageField(verbose_name='Envelope', upload_to='photo/%Y/%m/%d', blank=True, null=True)
    composition_title = models.CharField(max_length=455, verbose_name='Title', default='NoName', blank=True)
    composition_file = models.FileField(verbose_name='Composition file', upload_to='audio')
    composition_album = models.ForeignKey(Album, verbose_name='Album', blank=True, on_delete=models.CASCADE, null=True)
    composition_date = models.DateTimeField(auto_now_add=True, verbose_name='Song release date', null=True)
    composition_singer = models.ForeignKey('Profile', on_delete=models.PROTECT, null=True, verbose_name='Singer')
    composition_is_published = models.BooleanField(verbose_name='Released', default=False)

    def __str__(self):
        return self.composition_title


class Playlists(models.Model):
    playlist_user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Username', null=True)
    playlist_title = models.CharField(max_length=128, verbose_name='Title', null=True)
    playlist_envelope = models.ImageField(verbose_name='Envelope', upload_to='photo/%Y/%m/%d', null=True)
    date_playlist = models.DateTimeField(auto_now_add=True, verbose_name='Playlist creation date')
    playlist_composition = models.ManyToManyField('Composition', verbose_name='Composition', blank=True)
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
iggor-markin
@iggor-markin
Python Developer
Документация и метод add().

А ещё не нужно:
  • Добавлять каждому полю название модели
  • Называть модели во множественном числе
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы