django-rest-swagger不适合使用modelserializers吗?

sua*_*rab 13 python django rest swagger django-rest-framework

我一直在关于django-rest-swagger github页面上的文档,更具体地说是关于它如何工作的部分.它表明您可以为其余api定义自己的参数,并将这些参数显示在您的swagger文档页面中.

评论示例如下:

"""    
This text is the description for this API    
param1 -- A first parameter    
param2 -- A second parameter    
"""    
Run Code Online (Sandbox Code Playgroud)

我可以让它工作,但我的问题是如何指定变量是否是必需的,它的参数类型和它的数据类型.github页面显示了你的swagger doc看起来如何的示例图像,并且它们具有我刚刚提到的信息.但是当我评论我的自定义参数时,如示例所示,我的参数只显示为参数类型:"查询",数据类型:是空白,并且它不显示"必需".

我找到答案的最接近的事情就是这个stackoverflow问题.似乎答案提供者说django-rest-swagger通过自动检查你的序列化器来生成它的文档(这很好),并且模型序列化器不会包含足够的信息让django-rest-swagger正确地得出我提到的标准以上.我知道它无法弄清楚这个标准但是必须有一些方法让我手动指定它.

我是否正确django-rest-swagger只会显示我想要的东西,如果我将我的模型序列化器重写为序列化器?有没有办法让我手动告诉django-rest-swagger参数的参数类型和数据类型应该是什么,以及是否需要它?

我知道我必须在这里遗漏一些东西.我使用基于类的视图和模型序列化器,它们几乎与django-rest-framework教程中的示例相同.在这种情况下,我似乎完全没有理解"参数类型".我的API运行良好,我不想将我的模型序列化器重写为序列化器,因此我可以通过swagger获得更好的自动文档.

小智 1

在大多数情况下,ModelSerializer 就是您所需要的,因为它可以进行极大的定制以满足您的需求。在理想情况下,您应该在模型类中定义所有约束,例如字段上的必需属性,但有时在架构上是不可能的,那么您可以在 ModelSerializer 子类中覆盖这样的字段:

from django.contrib.auth import get_user_model
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    first_name = serializers.CharField(required=True)
    last_name = serializers.CharField(required=True)

    class Meta:
        model = get_user_model()
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我从 Django 序列化标准用户模型并覆盖所需的属性,因此现在需要first_namelast_name 。

当然,在某些情况下,很难或不可能使用 ModelSerializer,那么您始终可以回退到 Serializer 子类化