在Django REST Framework (DRF) 结合 drf-yasg (Yet Another Swagger Generator) 生成Swagger文档时,如果你想要在Swagger UI中消除id路径参数,可以通过自定义序列化器(Serializer)和视图(View)的方式来实现。
创建一个自定义的序列化器,排除id字段:
from rest_framework import serializers
from .models import YourModel
class YourModelSerializerWithoutId(serializers.ModelSerializer):
class Meta:
model = YourModel
fields = '__all__' # 或者指定需要的字段列表,排除'id'
extra_kwargs = {
'id': {'read_only': True, 'write_only': True}
}
在视图中使用这个自定义序列化器:
from rest_framework import viewsets
from .models import YourModel
from .serializers import YourModelSerializerWithoutId
class YourModelViewSet(viewsets.ModelViewSet):
queryset = YourModel.objects.all()
serializer_class = YourModelSerializerWithoutId
确保在drf-yasg的配置中排除id参数:
from drf_yasg.views import get_schema_view
from drf_yas克generators import OpenAPISchemaGenerator
from rest_framework import permissions
schema_view = get_schema_view(
openapi.Info(
title="Your API",
default_version='v1',
),
public=True,
permission_classes=(permissions.AllowAny,),
generator_class=OpenAPISchemaGenerator,
patterns=[path('your-api/', YourModelViewSet.as_view({'get': 'list'}), name='your-api-list')],
)
如果你在Swagger UI中仍然看到id路径参数,可能是因为:
extra_kwargs
正确设置了id
字段。YourModelSerializerWithoutId
正确排除了id字段。YourModelViewSet
使用了自定义的序列化器。通过以上步骤,你应该能够在Swagger UI中消除id路径参数。如果问题仍然存在,建议检查drf-yasg的版本和配置,确保它们是最新的,并且与DRF兼容。
领取专属 10元无门槛券
手把手带您无忧上云