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', ...)
Теперь у меня есть документ, как показано ниже:
Я хочу показать "босса"/"лидера"/"брата"/"сестру" в красном прямоугольнике.
Я погуглил, но не нашел решения, поэтому вот вопросы.
В этом представлении модели 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
