首页 > 解决方案 > DRF - `write_only=True` 显示在响应模式中

问题描述

我正在使用drf-yasg来记录我的 API。但是,我遇到了问题

我有一个序列化程序,其中一个字段设置为write_only=True.

class XYZSerializer(serializers.ModelSerializer):
    status = serializers.BooleanField(default=True, write_only=True)

    class Meta:

        model = XYZ
        fields = ('id', 'status')

生成 swagger 文档时,字段status仍显示在响应字段中。从技术上讲,它不应该。

如何纠正这个?

标签: pythondjango-rest-frameworkswaggerdrf-yasg

解决方案


很快:drf-yasg 的开发人员已经回答了这个问题。OpenAPI 2.0 规范中的问题,您可以使用https://github.com/tfranzel/drf-spectacular(它支持 OpenAPI 3.0)而不是 drf-yasg。

您可以仅为装饰器创建特殊的序列化程序

@swagger_auto_schema(responses={200: CustomResponseSerializer()})

或使您的序列化程序的字段动态(Django Rest Framework:动态返回字段子集)并像这样在视图集中装饰动作

@swagger_auto_schema(responses={200: YourSerializer(fields=['some_field_name', 'another_...')})

同样在https://github.com/axnsan12/drf-yasg/issues/70中,您可以从https://github.com/axnsan12/drf-yasg/issues/70#issuecomment-698288806找到另一种方式


推荐阅读