【发布时间】:2021-05-14 09:09:23
【问题描述】:
我试图在 Swagger 的示例部分显示主键,我使用的是 drf-spectacular,我的代码如下所示:
序列化器.py
class SerializerExample(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('id','name')
Views.py
class BooksBulkUpdate(APIView):
@extend_schema(
request=SerializerExample(many=True),
responses={200:''},
)
def put(self, request, format=None):
with transaction.atomic():
for data in request.data:
book = Book.objects.get(pk=data['id'])
serializer = SerializerExample(book, data=data, partial=True)
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
return Response()
仅显示名称字段:
我找到的唯一解决方案是使用inline serializer,这不是理想的解决方案,因为如果我更新我的书序列化程序,我必须记住也更新这个内联序列化程序。我想知道是否有更好的方法来做到这一点。
【问题讨论】:
-
id是一个“只读”字段,默认情况下,不应在 API 请求期间更改。即使您发送带有id字段的有效负载,DRF 也会优雅地忽略它。话虽如此,在您的 swagger 规范中表示id或在有效负载中发送它是没有用的 -
我的端点不会改变 id,但我需要 id 才能知道要更新哪本书。我的端点同时更新了一批图书。
-
那么,您打算在 DRF 端接受
id值吗? -
是的,我已更新问题以显示 view.py 代码的更详细示例
-
恕我直言,
inline serializer是最适合您的解决方案
标签: django-rest-framework swagger-ui drf-spectacular