简体   繁体   English

Django Rest Framework Serializer 在 is_valid() 调用后弹出了validated_data,导致创建时出现KeyError

[英]Django Rest Framework Serializer popped off the validated_data after is_valid() call, causing KeyError in create

I am just following the document to test to write a nested serializer from here我只是按照文档来测试从这里编写嵌套序列化程序

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

Below is my testing code下面是我的测试代码

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

data_to_save is this data_to_save 是这个

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

OrderedDict([('order', 2), ('title', 'song 2'), ('duration', 11)])]} OrderedDict([('order', 2), ('title', 'song 2'), ('duration', 11)])]}

It has a key 'tracks'它有一个关键的“轨道”

After calling is_valid(), the printed validated_data becomes调用is_valid()后,打印的validated_data变成

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

Key 'tracks' kind of popped.关键的“曲目”突然出现。

It causes save() error它会导致 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 = validated_data.pop('tracks') will fail. track_data =validated_data.pop('tracks') 将失败。 The print(validated_data) inside create() also has 'tracks' key suddenly disappear create() 中的 print(validated_data) 也有 'tracks' 键突然消失

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

May I know why?我可以知道为什么吗? My Django version 1.11.4 final and Django Rest Framework version is 3.6.3我的 Django 版本 1.11.4 final 和 Django Rest Framework 版本是 3.6.3

tracks = TrackSerializer(many=True)

在 AlbumSerializer 中删除 read_only=True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 即使 is_valid 为 True,Serializer validated_data 也是空的 - Serializer validated_data is empty even when is_valid is True Serializer is_valid 且没有错误,但 validated_data 为空(第三方 API 和 DRF) - Serializer is_valid and no errors, but validated_data is empty (third party API and DRF) Django Rest框架可验证的嵌套序列化器数据从validated_data中丢失 - Django rest framework writeable nested serializer data missing from validated_data django-rest-framework:无法调用`.is_valid()`,因为在实例化序列化器实例时没有传递`data =`关键字参数 - django-rest-framework: Cannot call `.is_valid()` as no `data=` keyword argument was passed when instantiating the serializer instance Django Rest框架嵌套的序列化程序未在validated_data中返回关系值 - Django Rest framework nested serializer not returning relation values in validated_data 将可编辑字段作为 Django-Rest-Framework 串行器的验证数据方法传递 - Passing Editable Fields as validated_data method of Django-Rest-Framework Serializer Django-REST-Framework:ForeignKey实例未传递到validated_data - Django-REST-Framework: ForeignKey instance is not passed to validated_data Django rest框架:嵌套对象未传递给validated_data - Django rest framework: Nested object not passing to validated_data Django Rest Framework PUT视图说validated_data未填充 - Django Rest Framework PUT view saying validated_data is unfilled 使用来自validated_data的kwargs的Django Rest Framework update() - Django Rest Framework update() with kwargs from validated_data
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM