![](/img/trans.png)
[英]Am using drf-spectacular for my Django rest api documentation, how to override our own endpoint
[英]Django Rest Framework - One serailizer for API and drf-spectacular
我有一个用于 DRF 的序列化程序和 drf-spectacular。 我的序列化程序可以正常工作,但在 GUI 中不能正确显示。 所以我需要有不同的序列化器,一个用于模式,第二个用于端点。 但我想用一个,如何解决这个问题?
我的序列化器:
class GetConversionCasesSerializer(serializers.Serializer):
conversionId = serializers.SerializerMethodField()
cases = serializers.SerializerMethodField()
def get_cases(self, obj):
serializer = ResultDataSerializer(ResultData.objects.filter(conversion=obj), many=True)
data = serializer.data
return data
def get_conversionId(self, obj):
return obj.id
模式序列化器:
class GetConversionCasesSerializerSchema(serializers.Serializer):
conversionId = serializers.IntegerField()
cases = serializers.ListSerializer(child=ResultDataSerializer())
Api 端点:
@extend_schema(request=None, responses=GetConversionCasesSerializerSchema())
def get(self, *args, **kwargs):
if self.request.version == "v1":
conversion_id = self.kwargs.get('conversion_id')
instance = Conversion.objects.get(id=conversion_id)
serializer = GetConversionCasesSerializer(instance)
return Response(serializer.data)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
当我用来显示模式正常的seliizer时,我有:
在模式序列化程序中:
如何修复第一个序列化程序并有一个用于模式和获取方法?
由于您的模型是相关的,因此您可以嵌套 serializers 。 这是一个简单的例子:
from rest_framework import serializers
from app.models import Conversion, ResultData
class ResultDataSerializer(serializers.ModelSerializer):
# TODO: Define only the attributes you're interested
class Meta:
model = ResultData
fields = '__all__'
class GetConversionCasesSerializer(serializers.ModelSerializer):
conversionId = serializers.CharField(source='id')
cases = ResultDataSerializer(many=True, source='resultdata_set') # `source` depends on your case
class Meta:
model = Conversion
fields = ('id', 'resultdata_set',) # add other fields of interest
请注意,我在任何地方都使用ModelSerializer
,因为它已经实现了一些用于创建资源的逻辑(如果它只是将数据返回给调用者,则在您的用例中并不感兴趣)并自动将 model 字段映射到 DRF 字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.