gpt4 book ai didi

python-3.x - KeyError + POST + Django Rest 框架

转载 作者:行者123 更新时间:2023-12-04 00:00:23 27 4
gpt4 key购买 nike

我是 Django Rest Framework 的新手,当我想发布数据时出现此错误 /api/“文件夹”处的 key 错误 .
这是我的代码:
在我的models.py

class Folder(models.Model):
name = models.CharField(max_length=200)

def __str__(self):
return self.name

class Todo(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
folder = models.ForeignKey('Folder', related_name='todos', on_delete=models.CASCADE)

def __str__(self):
return self.title

在我的 serializers.py
class FolderSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id','name',)
model = models.Folder
extra_kwargs = {
"id":{
"required":False,
"read_only":False
}
}

class TodoSerializer(serializers.ModelSerializer):
folder = FolderSerializer(read_only=True, required=False)
class Meta:
fields = ('id','title','description','folder',)
model = models.Todo

def create(self, validated_data):
# Get our folder
folder_data = validated_data.pop('folder')
# Create our todo
todo = models.Todo.objects.create(**validated_data)
for data in folder_data:
models.Folder.objects.create(todo=todo, **data)
return todo

在我的 views.py 中
class  ListTodo(generics.ListCreateAPIView):
queryset = models.Todo.objects.all()
serializer_class = serializers.TodoSerializer

问题是,当我想发布数据时:
{
“身份证”:4,
"title": "Python",
"description": "学习 Python 类(class)",
“文件夹”: {
“身份证”:1,
"name": "类(class)"
}
}
我收到这个错误
folder_data =validated_data.pop('文件夹')
key 错误:“文件夹”

我需要一些帮助

最佳答案

key 错误 加注是因为您设置了 read_only=True对于 TodoSerializer 中的文件夹.所以validated_data将不包含 folder key 。而且你也不能使用 required=False为文件夹。因为您的 Todo模型定义说文件夹是必填字段。因此,要使其工作,请按如下方式重写您的序列化程序

class FolderSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id','name',)
model = models.Folder

class TodoSerializer(serializers.ModelSerializer):
folder = FolderSerializer()
class Meta:
fields = ('id','title','description','folder',)
model = models.Todo

def create(self, validated_data):
folder_data = validated_data.pop('folder')
folder = models.Folder.objects.create(**folder_data)
todo = models.Todo.objects.create(folder=folder, **validated_data)
return todo

注意 : 由于您使用的是 serializers.ModelSerializer ,你不必写 extra_kwargs序列化器的条件。 ModelSerializer 本身从模型创建。 extra_kwargs仅用于 覆盖 序列化程序中的模型默认行为。

关于python-3.x - KeyError + POST + Django Rest 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50476112/

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