gpt4 book ai didi

django - 使用 drf-yasg,如何在响应中支持多个序列化程序?

转载 作者:行者123 更新时间:2023-12-03 16:39:55 27 4
gpt4 key购买 nike

我的 drf 的响应仅包含单个序列化程序给出的数据,我们可以将其实现为:

@swagger_auto_schema(
operation_id='ID example',
operation_description="Description example.",
responses={status.HTTP_200_OK: Serializer4ModelA(many=True)},
)

效果很好,但是有些请求构建了一个字典,其中两个或三个键对应于不同的序列化程序,例如
response = {
"a": serializer_data_for_model_a,
"b": serializer_data_for_model_b,
"c": serializer_data_for_model_c
}

我们如何在自动模式中描述它?我尝试了几种不同的方法,大多类似于以下方法:
@swagger_auto_schema(
operation_id='ID example',
operation_description="Description example.",
responses={status.HTTP_200_OK: openapi.Response(
description='response description',
schema=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'a': Serializer4ModelA(many=True),
'b': Serializer4ModelB(many=True),
'c': Serializer4ModelC(many=True)
})
)}
)

但是加载文档时总是失败, flex说:
"/usr/local/lib/python3.6/site-packages/flex/utils.py", line 125, in 
get_type_for_value raise ValueError("Unable to identify type of
{0}".format(repr(value)))
ValueError: Unable to identify type of
Serializer4ModelA(many=True):

我一遍又一遍地阅读文档,并在 github 上搜索了一个例子,但我找不到一个例子或任何人这样做。所以我的问题是如何成功为响应手动定义架构,该架构包含针对返回响应中不同键的不同序列化程序?

最佳答案

我通常做的是创建另一个序列化程序(只是为了让 drf-yasg 可以生成文档)。

例如,如果我有一个返回的端点:

{
"results": [..list of serialized results with serializer X...]
}

我创建了第二个序列化程序:

class Y(serializers.Serializer):
results = X(many=True)

并使用 Y swagger_auto_schema 装饰器中的序列化器。

关于django - 使用 drf-yasg,如何在响应中支持多个序列化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53825452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com