如何解决drf-spectacular:如何在 Swagger
我试图在 Swagger 的示例部分显示主键,我使用的是 drf-spectacular,我的代码如下所示:
Serializers.py
class SerializerExample(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('id','name')
视图.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,这不是理想的解决方案,因为如果我更新我的图书序列化程序,我必须记住也要更新这个内联序列化程序。我想知道是否有更好的方法来做到这一点。
解决方法
AFAIK swagger 显示输入请求架构。
例如,您要添加新的 person
并且您的模型是
class Person(models.Model):
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
name = models.CharField(max_length=30)
所以你只允许设置 name
参数
即使你发帖
{
"id": "someUUID","name": "NAME",}
id
将被忽略,Django 会根据自己的逻辑自动创建它(因为它是只读的)
但是您可以设置 id
字段可写:
class SerializerExample(serializers.ModelSerializer):
id = serializers.UUIDField(write_only=True)
name = serializers.CharField(write_only=True)
class Meta:
model = Person
fields = ('id','name')
write_only=True
表示当您保存新数据并从请求 json 接收 id
时该字段将处于活动状态。
相反,read_only=True
将在响应时打印 id
字段(如果您尝试获取数据)但在保存新数据时忽略它。
所以你尝试描述数据添加的API,当然不允许在请求json中设置id
字段。
不确定这个理论是否适用于您的案例,但希望对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。