Bel*_*lgi 7 django swagger django-rest-framework drf-yasg redoc
我正在使用 django、django drf 和 drf-yasg 来生成编写我的 BE 并生成文档。
我有一个名为 User 的模型和一个用于用户的序列化程序:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = users_models.User
fields = (users_models.User.first_name.field_name,
users_models.User.last_name.field_name,)
Run Code Online (Sandbox Code Playgroud)
我有一些方法 Foo 可以获得两个用户。这是请求的序列化程序的样子:
class FooRequestSerializer(serializers.ModelSerializer):
first_user = UserSerializer(help_text="first user")
second_user = UserSerializer(help_text="second user")
Run Code Online (Sandbox Code Playgroud)
当我为此生成一个swagger json方案时,我查看了json和redoc,我看到了:
我注意到如果我确保 ref 名称是不同的,那么 redoc 读起来很好,因为 first_user 和 second_user 得到了他们自己的描述。问题来了,因为我也希望以后能够使用 swagger codegen 来创建 Java 存根,所以解决方案和据我所知,每个不同的 ref 名称都有一个不同的类。理想情况下,我会看到对 foo 的调用类似于
Foo(User first_user, User second_user)
Run Code Online (Sandbox Code Playgroud)
这让我想到了一个问题:
如果 first_user 和 second_user 具有不同的 ref 名称,那么 redoc 可以工作,但我会生成两个不同的类,例如
Foo(FirstUser first_user, SecondUser second_user)
我需要做什么才能按预期工作重文档和生成的类?
小智 8
根据此处的drf-yasg 文档,您可以在序列化程序的 Meta 类中指定 ref_name 。因此,这样的事情应该工作(虽然不是很干净的解决方案):
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = users_models.User
fields = (users_models.User.first_name.field_name,
users_models.User.last_name.field_name,)
class FirstUserSerializer(UserSerializer):
class Meta:
ref_name = "User 1"
class SecondUserSerializer(UserSerializer):
class Meta:
ref_name = "User 2"
class FooRequestSerializer(serializers.ModelSerializer):
first_user = FirstUserSerializer(help_text="first user")
second_user = SecondUserSerializer(help_text="second user")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3070 次 |
| 最近记录: |