gpt4 book ai didi

python - Django Rest Framework Serializer 在 is_valid() 调用后弹出 valid_data,导致 create 中出现 KeyError

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:20 25 4
gpt4 key购买 nike

我只是按照文档来测试从这里编写嵌套序列化器

http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers

下面是我的测试代码

    print(data_to_save)
my_as = AlbumSerializer(data=data_to_save)
my_as.is_valid()
print(my_as.validated_data)
my_as.save()

要保存的数据是这个

{'album_name': 'Peter ABC', 'artist': 'Peter', 'tracks': [OrderedDict([('order', 1), ('title', 'song 1'), ('duration', 11)]), 

OrderedDict([('订单', 2), ('标题', '歌曲 2'), ('持续时间', 11)])]}

它有一个关键的“轨道”

调用is_valid()后,打印出的validated_data变为

OrderedDict([('album_name', 'Peter ABC'), ('artist', 'Peter')])

关键“轨道”有点弹出。

它会导致 save() 错误

class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True)

class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')

def create(self, validated_data):
print(validated_data)

tracks_data = validated_data.pop('tracks')
album = Album.objects.create(**validated_data)
for track_data in tracks_data:
Track.objects.create(album=album, **track_data)
return album

tracks_data = valid_data.pop('tracks') 将失败。 create() 中的 print(validated_data) 也有“tracks”键突然消失

{'album_name': 'Peter ABC', 'artist': 'Peter'}

我可以知道为什么吗?我的 Django 版本为 1.11.4 Final,Django Rest Framework 版本为 3.6.3

最佳答案

tracks = TrackSerializer(many=True)

删除AlbumSerializer中的read_only=True

关于python - Django Rest Framework Serializer 在 is_valid() 调用后弹出 valid_data,导致 create 中出现 KeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com