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

标签 django django-rest-framework

我正在尝试在 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/

    相关文章:

    python - 如何根据客户端 django rest 框架从 ViewSets 返回 html 或 json

    python - DRF : Database not updating

    Django REST 框架 APIClient 在 shell 中进行身份验证,但不在我的单元测试中

    django - 为什么 django-social-auth 在登录时不考虑下一个变量?

    django - 如何修改django-celery web界面进行周期性调度

    python - 按模型创建记录

    python - 当且仅当用户注销时才使用 Django 的缓存?

    django - 如何使用 django-storages 和 boto3 获取 aws s3 对象键

    python - 使用 Django REST 框架存储列表

    python - django 6 1.10.0没有名为http_client的模块错误