Как десериализовать массив первичных ключей с помощью Django Rest Framework PrimaryKeyRelatedField

Я следовал docs при настройке моего сериализатора.

class PlaylistSerializer(serializers.ModelSerializer):
    songs = serializers.PrimaryKeyRelatedField(queryset=Song.objects.all(), many=True, allow_empty=True, required=False)

    class Meta:
        model = Playlist
        fields = ['id', 'name', 'songs', 'created_at']

Если я добавляю несколько песен в плейлист в админке django и отправляю запрос get, я получаю нужный мне результат.

{
    "id": 4,
    "name": "teszt3",
    "songs": [
        351,
        350
    ],
    "created_at": "2022-01-14T14:04:36.238350Z"
}

Но я хочу создать или обновить плейлист с аналогичным списком первичных ключей песен. Если я отправлю POST-запрос с таким телом:

{
    "name": "test2",
    "songs": [350, 351]
}

Я получаю эту ошибку:

Incorrect type. Expected pk value, received str

Если в поле songs есть только одно число (первичный ключ), это работает, но я хочу создавать плейлисты с большим количеством песен одновременно. Есть ли способ разобрать этот массив, или как я могу решить эту проблему?

Вероятно, у вас есть какая-то ошибка в ваших моделях или конечной точке. Поскольку вы не предоставили эту информацию, вот рабочий пример, который полностью совместим с вашим Serializer.

models.py

class Song(models.Model):
    pass


class Playlist(models.Model):
    name = models.CharField(max_length=50)
    songs = models.ManyToManyField(Song)
    created_at = models.DateTimeField(auto_now_add=True)

views.py

class CreatePlaylist(CreateAPIView):
    serializer_class = PlaylistSerializer
Вернуться на верх