我使用drf_spectacular和所有的路线建设正常,除了一个:
@action(detail=False, methods=['GET'])
def unique_cities(self, request):
"""Getting unique cities from DB sports_person."""
unique_cities = SportsPerson.objects.values_list('city', flat=True)
return Response({'unique_cities': list(unique_cities)})
当然,作为回答,我有:
{
"unique_cities": [
"New-York",
"Kyiv",
"Test"
]
}
但在swagger for this route中,我看到了一个类似于我个人的一般路线的模式:
{
"id": 0,
"first_name": "string",
"last_name": "string",
"birth_day": "2023-09-13",
"rank": "string",
"city": "string",
"team": "string"
}
我理解了从我的CRUD端点的序列化器构建模式,但是对于问题路由,我不需要它们。我试着用比这样的东西:
@extend_schema(
responses={200: {"unique_cities": [str]}},
examples={
"application/json": {
"unique_cities": ["New-York", "Kyiv", "Test"]
}
},
)
但也不管用,我看有两个办法可以解决这个问题:实现正确@extend_schema或从drf_spectacular修复工作autoschema,但我卡住了,找不到解决方案
1条答案
按热度按时间cmssoen21#
问题,@detail_route()不再使用,但@action()没有为autoschema打开。路由是如此简单,创建序列化器和其他代码是不感兴趣的,所以我决定在装饰器中创建一个模式。它完全有效