Django Rest-Framework: как добавлять/удалять записи в отношениях ManyToMany?
Я только что просмотрел учебник Django-Rest-Framework (DRF) и попытался адаптировать его к простому приложению для фотографий, над которым я работаю, с моделями Album и Photo в отношениях M-2-M: альбом может иметь много фотографий, а фотография может быть во многих альбомах. В базе данных есть таблицы myapp_album, myapp_photo и myapp_album_photos, как и следовало ожидать.
Но я хочу иметь возможность создавать альбомы и фотографии независимо друг от друга и потом создавать отношения между ними. Я могу легко сделать это в оболочке с помощью photo.add(album) и т.д., но мне не ясно, как это сделать через сгенерированные DRF маршруты.
Проблема в том, что используя краткие абстракции DRF, которые я почерпнул из учебника (используя ModelSerializer, наборы представлений и т.д. ), я получаю только маршруты к /albums и /photos, и мне не ясно, как создать маршрут (или как иначе), чтобы связать существующие фотографии с существующими альбомами.
Может ли кто-нибудь помочь прояснить ситуацию? Спасибо
### models.py
class Photo(models.Model):
title = models.CharField(max_length=100, blank=True)
caption = models.TextField(blank=True)
datetime = models.DateTimeField(auto_now_add=False, blank=False)
filename = models.CharField(max_length=100, blank=False)
class Album(models.Model):
name = models.CharField(max_length=100, blank=False, default='')
description = models.TextField()
photos = models.ManyToManyField(Photo)
### serializers.py
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = ['id', 'name', 'description']
class PhotoSerializer(serializers.ModelSerializer):
class Meta:
model = Photo
fields = ['id', 'title', 'caption', 'datetime', 'filename']
### views.py
class AlbumViewSet(viewsets.ModelViewSet):
queryset = Album.objects.all()
serializer_class = AlbumSerializer
class PhotoViewSet(viewsets.ModelViewSet):
queryset = Photo.objects.all()
serializer_class = PhotoSerializer
Вам придется построить эту функциональность вручную.