【问题标题】:How to return empty queryset from serializer.data Django Rest Framework如何从 serializer.data Django Rest Framework 返回空查询集
【发布时间】:2021-04-22 03:37:49
【问题描述】:

view.py

class User_ListView(APIView):
    permission_classes = [DjangoCustomModelPermissions]
    queryset = User.objects.none()

    def get(self, request):
        param1 = request.query_params.get('param1',None) 
        param2 = request.query_params.get('param2',None)

        try:
            db_data = User.objects.get(param1 = param1, param2=param2)
            serializer = User_Serializer(db_data)
            return Response(serializer.data)
        except Closing_Stock_List_Trans.DoesNotExist:
            db_data = User.objects.none()
            serializer = User_Serializer(db_data)
            return Response(serializer.data)

serializer.py

class User_Serializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

我希望序列化程序在用户模型中没有 User DoesNotExist 时返回空响应,但是我收到以下错误。我怎样才能做到这一点?

AttributeError: Got AttributeError when attempting to get a value for field `param1` on serializer `User_Serializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: 'QuerySet' object has no attribute 'param1'.

【问题讨论】:

    标签: python django django-rest-framework django-views


    【解决方案1】:

    您正在尝试序列化查询集,因此您需要将many=True 添加到序列化中。

    ....
    except Closing_Stock_List_Trans.DoesNotExist:
        db_data = User.objects.none()
        serializer = User_Serializer(db_data, many=True)
        return Response(serializer.data)
    

    【讨论】:

    • 这行得通,谢谢。只是一个后续问题。目前,如果找到对象,我返回状态 200,如果不是,我返回并将空列表作为响应。如果我有任何其他错误,我应该返回什么状态,应该是 500?
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2017-06-04
    • 2021-10-02
    相关资源
    最近更新 更多