我正在使用 drf-spectaulous 生成 Swagger 文档。
我有一个返回字典的视图集(它不通过 drf 序列化器,因为它都是本机对象)。
字典看起来像这样:
data = {
"lines": List[str],
"points": List[Tuple[float, float, int, str]]
"next_failure_date": str,
"estimate_nth_failure": str
"status": str,
}
我找不到 drf-spectaulous 正确记录“点”键的方法,它只给了我一个
"points": ["string"]
我尝试过的:
class SwaggerGrowthChartPoint:
"""Class used to generate the Swagger documentation"""
def __init__(self, x: float, y: float, sap_id: int, created_on: str):
self.x = x
self.y = y
self.sap_id = sap_id
self.created_on = created_on
class SwaggerGrowthChartPointField(serializers.Field):
def to_representation(self, value: SwaggerGrowthChartPoint):
return f"{value.x}, {value.y}, {value.sap_id}, {value.created_on}"
def to_internal_value(self, data):
return SwaggerGrowthChartPoint(*data)
class SwaggerGrowthChartSerializer(serializers.Serializer):
"""Serializer used to generate the Swagger documentation"""
lines = SwaggerGrowthChartLinesSerializer(many=True)
points = serializers.ListField(child=SwaggerGrowthChartPointField())
next_failure_date = serializers.ListField(child=serializers.DateField())
estimate_nth_failure = serializers.DateField()
status = serializers.CharField()
但运气不佳。
这似乎部分解决了我的问题:
@extend_schema_field(
{
"type": "array",
"items": {
"oneOf": [
{"type": "string"},
{"type": "integer"},
],
},
"description": "A time point and its availability state",
"example": '["00:00", 1]',
}
)
class TimePointAvailabilityField(serializers.Field):
pass
class DetailedScheduleItem(serializers.Serializer):
date = serializers.DateField()
schedule = serializers.ListField(child=TimePointAvailabilityField())
至少,它生成了正确的 JSON 示例:
{
"date": "2023-11-21",
"schedule": [
[
"00:00",
1
]
]
}
如果您只需要示例,则可以完全避免使用字段类型,因为模式具有示例值来生成它就足够了。