gpt4 book ai didi

django - id 不存在于 validate() 和 ListSerializer 的 update() Django Rest Framework 中

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

我正在学习 Django Rest Framework 的新手,并且在序列化程序验证和 ListSerializer 更新方法方面遇到问题。

我有一个处理放置请求的 APIView 类。我只是想进行自定义验证,因此我在序列化程序类中覆盖了验证方法。

我从 postman 那里向这个 APIView 类发送了一个 JSON 数据。

样本 JASON 数据:

[
{
"id": 1,
"ip": "10.1.1.1",
"host_name": "hostname 1"
},
{
"id": 2,
"ip": "10.1.1.2",
"host_name": "hostname 2"
}
]


当我收到数据并执行 serializer.is_valid() 时,它将流传递给覆盖的验证函数。但是在那里,当我检查 attrs 参数时,我得到了除 id 之外的所有字段。 id 的键和值不存在。它显示无。

当我尝试覆盖 ListSerializer 中的更新方法时,我也遇到了同样的问题。

当我在 ListSerializer 的更新方法中尝试以下代码时,
data_mapping = {item['id']: item for item in validated_data}

我收到一条错误消息,提示 KeyError 'id'。

似乎它不接受 id 字段,我不知道为什么!如果我在任何地方错了,请有人向我解释这一点。

序列化器类
from rest_framework import serializers
from .models import NoAccessDetails


class NoAccessDetailsListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data)

data_mapping = {data.id: data for data in instance}

#Here I'm getting KeyError ID
validated_data_mapping = {item['id']: item for item in validated_data}

return


class NoAccessDetailsSerializer(serializers.ModelSerializer):

class Meta:
model = NoAccessDetails
list_serializer_class = NoAccessDetailsListSerializer
fields = ("id", "ip", "host_name")

def validate(self, data):

id_val = data.get('id')
ip = data.get('ip')
host_name = data.get('host_name')

#here the id value is None
print('id val {} '.format(id_val))
return data

最佳答案

如果我理解正确,问题是您没有看到 id validated_data 内的字段.如果是这样,我相信这是在框架中有意为之:

https://github.com/encode/django-rest-framework/issues/2320

基本上,id字段是 read_only默认情况下。如果您有汤姆对该问题的回答没有回答的问题,请告诉我。

编辑:也可以随意分享更高级别的用例(您计划在验证中使用 ID 做什么),也许我们可以提供替代方法。

关于django - id 不存在于 validate() 和 ListSerializer 的 update() Django Rest Framework 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123315/

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