【问题标题】:Using extend_schema_field for custom field对自定义字段使用 extend_schema_field
【发布时间】:2021-09-25 01:20:28
【问题描述】:

我创建了一个名为 PictureField 的自定义字段,它使用上传的图像创建缩略图,并在我的 User 模型中使用它

用户模型:

class User(AbstractBaseUser):
    profile_image = PictureField(make_thumbnail=True)

我的PictureField,得到一个像django's ImageField 这样的图像文件并返回一个像这样的字典:

{
    "image": {
      "url": "string",
      "name": "string"
    },
    "thumbnail": {
      "url": "string",
      "name": "string"
    } | None
}

一切都很好,我的自定义字段工作正常。我的问题是使用 drf_spectacular 创建的模式。我不知道如何将此输出设置为我的PictureSerializerField。已经,我将我的字段的 @extend_schema_field 装饰器设置为 BINARY (以便能够使用 Swagger 上传文件),这样,我的响应输出设置为“字符串”:

@extend_schema_field(OpenApiTypes.BINARY)
class PictureSerializerField(ImageField):
     ...

现在,我的 Swagger 文档如下所示:
我正在寻找类似下面的东西来向响应显示我的输出,并且我能够在请求中上传文件:

@extend_schema_field({
    'request':OpenApiTypes.BINARY,
    'response': {}# My output example that I said above
})

我的想法是创建一个空的序列化程序类并在其上设置@extend_schema_serializer,但我认为这不是好方法并且不起作用。

【问题讨论】:

    标签: django-rest-framework swagger openapi django-serializer drf-spectacular


    【解决方案1】:

    好的,我已经解决了。刚刚阅读了一点 OpenAPI 文档,我还看到 @extend_schema_field 支持 dict 参数,所以我这样编写代码:

    @extend_schema_field({'type':"string",'format':'binary',
        'example':{
                 "image":{"url":"string","name":"string"},
                 "thumbnail":{"url":"string","name":"string"}
        }
    })
    class PictureSerializerField(ImageField):
        ...
    

    看起来还可以。

    【讨论】:

      猜你喜欢
      • 2013-11-25
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多