使用 extend_schema_field 作为自定义字段
Using extend_schema_field for custom field
我创建了一个名为 PictureField
的自定义字段,它使用上传的图像创建缩略图,并在我的 User
模型中使用它
用户模型:
class User(AbstractBaseUser):
profile_image = PictureField(make_thumbnail=True)
我的 PictureField
,得到像 django's ImageField
这样的图像文件和 returns 这样的字典:
{
"image": {
"url": "string",
"name": "string"
},
"thumbnail": {
"url": "string",
"name": "string"
} | None
}
一切正常,我的自定义字段工作正常。我的问题是使用 drf_spectacular 创建的模式。我不知道如何将此输出设置为我的 PictureSerializerField
。我已经将我的字段的 @extend_schema_field
装饰器设置为 BINARY
(以便能够使用 Swagger 上传文件),并且我的响应输出设置为“string”:
@extend_schema_field(OpenApiTypes.BINARY)
class PictureSerializerField(ImageField):
...
现在,我的 Swagger 文档如下所示:
我正在寻找类似下面的内容来向 Response 显示我的输出,并且我还可以在 Request:
中上传文件
@extend_schema_field({
'request':OpenApiTypes.BINARY,
'response': {}# My output example that I said above
})
我的想法是创建一个空的序列化程序 class 并在其上设置 @extend_schema_serializer
但我认为这不是好方法而且行不通。
好的,我已经修好了。刚刚阅读了一些 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):
...
看起来还不错。
我创建了一个名为 PictureField
的自定义字段,它使用上传的图像创建缩略图,并在我的 User
模型中使用它
用户模型:
class User(AbstractBaseUser):
profile_image = PictureField(make_thumbnail=True)
我的 PictureField
,得到像 django's ImageField
这样的图像文件和 returns 这样的字典:
{
"image": {
"url": "string",
"name": "string"
},
"thumbnail": {
"url": "string",
"name": "string"
} | None
}
一切正常,我的自定义字段工作正常。我的问题是使用 drf_spectacular 创建的模式。我不知道如何将此输出设置为我的 PictureSerializerField
。我已经将我的字段的 @extend_schema_field
装饰器设置为 BINARY
(以便能够使用 Swagger 上传文件),并且我的响应输出设置为“string”:
@extend_schema_field(OpenApiTypes.BINARY)
class PictureSerializerField(ImageField):
...
现在,我的 Swagger 文档如下所示:
我正在寻找类似下面的内容来向 Response 显示我的输出,并且我还可以在 Request:
@extend_schema_field({
'request':OpenApiTypes.BINARY,
'response': {}# My output example that I said above
})
我的想法是创建一个空的序列化程序 class 并在其上设置 @extend_schema_serializer
但我认为这不是好方法而且行不通。
好的,我已经修好了。刚刚阅读了一些 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):
...
看起来还不错。