问题描述
我有一个 Django API,我尝试使用 drf-yasg 创建文档。我的嵌套序列化程序和 ListAPIview 的自动生成模式遇到问题。它看起来像这样:
serializers.py
import pandas as pd
def convert(x):
if isinstance(x,int):
return x
elif isinstance(x,float):
return int(x)
else:
# Defaults to 0 when not convertable
return 0
print(x)
df = pd.DataFrame({'col': [23145,23145.0,'No value kNown']})
df['col'] = df['col'].apply(convert)
views.py
class SlideDataSerializer(serializers.ModelSerializer):
description = SlideDataDescriptionSerializer(many=True,read_only=True,source='slidedatadescription_set')
class Meta:
model = SlideData
fields = ['catch','title','description','icon']
class SlideSerializer(serializers.ModelSerializer):
datas = SlideDataSerializer(many=True,source='slidedata_set')
class Meta:
model = Slide
fields = ['datas']
class PlanDataDescriptionSerializer(serializers.ModelSerializer):
class Meta:
model = PlanDataDescription
fields = ['description']
class PlanDataSerializer(serializers.ModelSerializer):
description = PlanDataDescriptionSerializer(many=True,source='plandatadescription_set')
class Meta:
model = PlanData
fields = ['stripColor','name','pricePerMonth','currency','picture']
class PlanSerializer(serializers.ModelSerializer):
datas = PlanDataSerializer(many=True,source='plandata_set')
class Meta:
model = Plan
fields = ['mainTitle','datas']
和 urls.py:
class ProjectList(generics.ListAPIView):
permission_classes = [permissions.AllowAny]
serializer_class_slide = SlideSerializer
serializer_class_plan = PlanSerializer
def get_queryset_object(self,Table,campaign,lang):
queryset = Table.objects.filter(campaign__name=campaign).filter(language__alpha2=lang)
return queryset[0]
def list(self,request):
Tables = [Slide,Plan]
campaign = self.request.query_params.get('campaign') or "default"
lang = self.request.query_params.get('lang') or "en"
if not all(Table.objects.filter(campaign__name=campaign).filter(language__alpha2=lang) for Table in Tables):
campaign = "default"
if not all(Table.objects.filter(campaign__name=campaign).filter(language__alpha2=lang) for Table in Tables):
lang = "en"
slides = self.serializer_class_slide(self.get_queryset_object(Slide,lang))
plans = self.serializer_class_plan(self.get_queryset_object(Plan,lang))
return Response({
"slides": slides.data,"plans": plans.data,})
端点工作正常,但 swagger 没有创建正确的请求或响应,当我访问它时,它给了我这个错误消息:
openapi_info = openapi.Info(
title="Projectname",default_version="v1",description="Endpoints",terms_of_service="TBD",contact=openapi.Contact(email="abc@123.com"),license=openapi.License(name="BSD License"),)
schema_view = get_schema_view(
openapi_info,public=True,permission_classes=(permissions.AllowAny,),)
API_VERSION = 'v1'
urlpatterns = [
path('swagger/',schema_view.with_ui(
'swagger',cache_timeout=0),name='schema-swagger-ui'),path('swagger/api.json',schema_view.without_ui( cache_timeout=0),name='schema-swagger-json'),]
我无法包含序列化器类名,因为我使用了多个序列化器,我无法为此创建单个序列化器,因为它们被拆分到不同的模型中。覆盖 get_serializer_class() 没有用,因为我也不知道如何在那里合并这些序列化程序。我怎样才能使这个表示工作?提前致谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)