gpt4 book ai didi

django - 如何在 Django Rest Framework 的 get 方法中序列化查询集?

转载 作者:行者123 更新时间:2023-12-04 16:57:36 25 4
gpt4 key购买 nike

我正在尝试在 this page 之后的 APIView 类中实现计算逻辑.
但是,我遇到以下错误,因为我尝试序列化查询集,而不是页面中演示的字典。
有谁知道我如何将查询集作为参数传递给序列化程序?如果没有,有什么方法可以转换成可以被序列化程序序列化的格式?

{
"non_field_errors": [
"Invalid data. Expected a dictionary, but got QuerySet."
]
}

View .py
class envelopeData(APIView):

def get(self,request,pk):
#pk=self.kwargs['pk']
#print (pk)

glass_json=self.get_serialized(pk,"glass")
print (glass_json)

def get_serialized(self,pk,keyword):
queryset = summary.objects.filter(html__pk=pk).filter(keyword=keyword)
serializer = summarySerializer(data=queryset) <=get error here
serializer.is_valid(raise_exception=True)

data=serializer.validated_data
return data["json"]

serializer.py
class strToJson(serializers.CharField):

def to_representation(self,value):
x=JSON.loads(value)
return x

class summarySerializer(serializers.ModelSerializer):
project=serializers.CharField(read_only=True,source="html.project")
version = serializers.CharField(read_only=True, source="html.version")
pk = serializers.IntegerField(read_only=True, source="html.pk")
json = strToJson()
#json=serializers.JSONField(binary=True)

class Meta:
model=summary
fields=('pk','project','version','json')

最佳答案

这些事情你要知道

  • 由于您正在传递 QuerySet 对象,你绝不能提供 data 争论。
  • QuerySet list喜欢的对象 ,所以你应该提供 many=True 同时序列化。
  • is_valid() 仅当您将字典传递给 时,方法才适用。 data 论证,这不在这里。

  • 所以,换你 get_serialized() 方法为,
    def get_serialized(self, pk, keyword):
    queryset = summary.objects.filter(html__pk=pk).filter(keyword=keyword)
    serializer = summarySerializer(queryset, many=True)
    data = serializer.data

    return data["json"]

    引用文献
  • Dealing with multiple objects in Serializer ---- many=True
  • is_valid()
  • 关于django - 如何在 Django Rest Framework 的 get 方法中序列化查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52060636/

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