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

Вам придется построить эту функциональность вручную.

Вернуться на верх