Как десериализовать массив первичных ключей с помощью 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