Drf-yasg, Как добавить выбор модели в api doc?

У меня есть такая модель:

class User(AbstractUser):
    PERMISSION_CHOICES = [
        (0, 'boss'),
        (1, 'leader'),
        (2, 'bro'),
        (3, 'sis'),
    ]

    permission = models.SmallIntegerField(
        _('permission'),
        default=0,
        choices=PERMISSION_CHOICES,
        help_text=_('xxx')
    )

Мой сериализатор выглядит следующим образом:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('permission', ...)

Теперь у меня есть документ, как показано ниже:

enter image description here

Я хочу показать "босса"/"лидера"/"брата"/"сестру" в красном прямоугольнике.

Я погуглил, но не нашел решения, поэтому вот вопросы.

В этом представлении модели Swagger нет ничего неправильного - что вы видите, то и получаете.

Если вы вызовете этот API - в вашем поле полезной нагрузки permission будет целое число. Например:

{
    "permission": 0
}

Так что если вы хотите изменить это в Swagger - это будет изменено и в модели (сериализаторе), и, следовательно, ваш результат API также будет изменен. Т.е.:

{
    "permission": "boss"
}

Если это то, что вы ищете - тогда вам нужно определить пользовательское свойство сериализатора следующим образом:

class UserSerializer(serializers.ModelSerializer):
    permission = serializers.SerializerMethodField()

    def get_permission(self, obj):
        return obj.get_permission_display()

    class Meta:
        model = User
        fields = ('permission', ...)

Больше различных вариантов достижения этой цели можно найти здесь: Django Rest Framework with ChoiceField

Вернуться на верх