【发布时间】:2026-01-25 10:35:01
【问题描述】:
我在设置序列化程序时遵循了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
如果歌曲字段中只有一个数字(主键),它可以工作,但我想一次创建包含多首歌曲的播放列表。有没有办法解析该数组,或者我该如何解决?
编辑: 模型.py
class Song(models.Model):
id = models.IntegerField(primary_key=True)
title = models.CharField(max_length=256)
lyrics = models.CharField(max_length=5000)
verses = models.CharField(max_length=5000, blank=True, default='')
class Playlist(models.Model):
name = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
songs = models.ManyToManyField(Song)
views.py
class SongViewSet(viewsets.ModelViewSet):
queryset = Song.objects.all().order_by('id')
serializer_class = SongSerializer
class PlaylistViewSet(viewsets.ModelViewSet):
queryset = Playlist.objects.all().order_by('-created_at')
serializer_class = PlaylistSerializer
【问题讨论】:
标签: python django django-rest-framework