簡體   English   中英

使用 django 和 drf-yasg 重用序列化程序的問題

[英]Problem reusing serializers with django and drf-yasg

我正在使用 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,)

我有一些方法 Foo 可以獲得兩個用戶。 這是請求的序列化程序的樣子:

class FooRequestSerializer(serializers.ModelSerializer):
      first_user = UserSerializer(help_text="first user")
      second_user = UserSerializer(help_text="second user")

當我為此生成一個swagger json方案時,我查看了json和redoc,我看到了:

  1. first_user 和 second_user 具有相同的引用名稱 ($ref)
  2. second_user 和 redoc 的描述為“第一個用戶”而不是第二個用戶。 這是因為描述取自具有第一個用戶描述的 $ref。

我注意到如果我確保 ref 名稱是不同的,那么 redoc 讀起來很好,因為 first_user 和 second_user 得到了他們自己的描述。 問題來了,因為我也希望以后能夠使用 swagger codegen 來創建 Java 存根,所以解決方案和據我所知,每個不同的 ref 名稱都有一個不同的類。 理想情況下,我會看到對 foo 的調用類似於

Foo(User first_user, User second_user)

這讓我想到了一個問題:

  • 如果 first_user 和 second_user 具有相同的引用名稱,則 redoc 讀取錯誤並且第二個用戶具有第一個用戶描述。
  • 如果 first_user 和 second_user 具有不同的 ref 名稱,那么 redoc 可以工作,但我會生成兩個不同的類,例如

    Foo(FirstUser first_user, SecondUser second_user)

我需要做什么才能按預期工作重文檔和生成的類?

根據此處的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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM