如何在Django Rest Framework中隐藏一些字段以进行响应

cat*_*hyk 2 django django-rest-framework

另一个DRF新手在这里。

我想隐藏一些字段以响应我的REST API。

假设我有一些基本的Exchange服务

serializers.py

class ConversionSerializer(serializers.Serializer):
    value = serializers.FloatField()
    from_ = serializers.ChoiceField(choices=SOME_CHOICES)
    to_ = serializers.ChoiceField(choices=SOME_CHOICES)
    converted_value = serializers.SerializerMethodField(read_only=True)
    ....
Run Code Online (Sandbox Code Playgroud)

views.py

class ConversionAPIView(APIView):
    serializer_class = ConversionSerializer
    permission_classes = []

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        return Response(serializer.data)
        ....
Run Code Online (Sandbox Code Playgroud)

对于我的POST请求,我传递了3个值:value,from,to。作为响应,我得到4个值:value,from,to,converted_value。

{
    "value": 100,
    "from_": "foo",
    "to_": "bar",
    "converted_value": 200
} 
Run Code Online (Sandbox Code Playgroud)

现在,我只想获得而不是所有字段作为响应的converted_value。如何执行呢?谢谢

Lin*_*via 5

您应该为此使用write_only参数:

class ConversionSerializer(serializers.Serializer):
    value = serializers.FloatField(write_only=True)
    from_ = serializers.ChoiceField(write_only=True, choices=SOME_CHOICES)
    to_ = serializers.ChoiceField(write_only=True, choices=SOME_CHOICES)
    converted_value = serializers.SerializerMethodField(read_only=True)
    ....
Run Code Online (Sandbox Code Playgroud)