gpt4 book ai didi

django - 序列化错误 : Incorrect type. 预期的 pk 值,已收到帖子

转载 作者:行者123 更新时间:2023-12-02 05:24:43 25 4
gpt4 key购买 nike

我正在尝试创建一个具有嵌套序列化的对象,以便也创建与其相关的其他对象。我已经重写了 ModelSerializer 的 create() 方法,并且主对象已成功创建。

    def create(self, validated_data):
post_data = validated_data.pop('post_set')
big_post = BigPost.objects.create(**validated_data) // This works
for post in post_data:
e = PostSerializer(data=post)
if e.is_valid():
e.save()
else:
print(e.errors) // Prints 'Incorrect type' error
return big_post

但是,当尝试创建嵌套对象(Post)时,我收到此错误:

{'note': ['Incorrect type. Expected pk value, received Note.']}

'note'是PostSerializer的一个字段,如下所示:

class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('id', 'note', 'title', 'description')

我知道 ModelSerializer 的默认行为是为模型的任何相关字段创建 PrimaryKeyRelatedField。但是,我不知道为什么当提交的数据只是像这样的 PK 时要创建实例:{"note":3, ....}

最佳答案

如果您的序列化程序定义正确,则无需第二次反序列化 valid_data。

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

试试这个代码:

class PostSerializer(serializers.ModelSerializer):
...

class BigPostSerializer(serializers.ModelSerializer):
posts = PostSerializer(source='post_set', many=True)

def create(self, validated_data):
post_data = validated_data.pop('post_set')
big_post = BigPost.objects.create(**validated_data)

for post in post_data:
e = Post.objects.create(bigpost=big_post, **post)

return big_post

bigpost - 是 BigPost 的外键名称。

关于django - 序列化错误 : Incorrect type. 预期的 pk 值,已收到帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925530/

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