![](/img/trans.png)
[英]how to specify example value on drf-yasg swagger_auto_schema request_body?
[英]Django - drf-yasg setting request_body in @swagger_auto_schema to reduced version of serializer on @api_view
有没有办法将@swagger_auto_schema
request_body
设置为仅作为序列化程序的一部分? 正如您在下面看到的那样,创建者的推理是由身份验证器传递给post_create
视图的当前用户对象设置的,但是如果我将request_body
设置为PostSerializer
,这会让其他人感到困惑,因为他们会认为它需要一个creator
属性,即使是从用户那里解析出来的。 有没有办法可以为这个端点设置request_body
,它使用@api_view
和一些PostSerializer
?
查看.py
@api_view(['POST'])
@swagger_auto_schema(
operation_description="Create a post object"
)
def post_create(request):
try:
request.data['creator'] = str(request.user.uuid)
post_serializer = PostSerializer(data=request.data)
if post_serializer.is_valid(raise_exception=True):
post_obj = post_serializer.save()
except ValidationError as e:
return Response(dict(error=str(e),
user_message=error_message_generic),
status=status.HTTP_400_BAD_REQUEST)
return Response(post_serializer.data, status=status.HTTP_201_CREATED)
序列化程序.py
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('creator', 'body', 'uuid', 'created', 'updated_at')
一种方法是实现仅包含相关字段子集的第二个序列化程序,如下所示:
class PostSerializerCreator(serializers.ModelSerializer):
class Meta:
model = Post
# Only include the user-provided fields
fields = ('body', 'uuid', 'created', 'updated_at')
@api_view(['POST'])
@swagger_auto_schema(
request_body=PostSerializerCreator,
operation_description="Create a post object"
)
def post_create(request):
try:
request.data['creator'] = str(request.user.uuid)
post_serializer = PostSerializer(data=request.data)
if post_serializer.is_valid(raise_exception=True):
post_obj = post_serializer.save()
except ValidationError as e:
return Response(dict(error=str(e),
user_message=error_message_generic),
status=status.HTTP_400_BAD_REQUEST)
return Response(post_serializer.data, status=status.HTTP_201_CREATED)
我想您还应该删除其他字段,例如应在执行时计算而不是由 API 用户提供的updated_at
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.