У меня есть веб-сервис Django (Django Rest Framework), который использует drf-yasg
для генерации swagger.json
файла.В этой модели у меня есть пара перечислений / полей выбора, которые используются более чем в одном месте.По умолчанию drf-yasg
определяет встроенное поле для каждого вхождения:
Choices = serializers.ChoiceField(choices=['a', 'b', 'c'])
class SomeObject(serializers.Serializer):
field_1 = Choices
field_2 = Choices
Создает следующие определения в файле swagger:
{
"definitions": {
"SomeObject": {
"required": [ "field_1", "field_2" ],
"type": "object",
"properties": {
"field_1": {
"title": "Field 1",
"type": "string",
"enum": [ "a", "b", "c" ]
},
"field_2": {
"title": "Field 1",
"type": "string",
"enum": [ "a", "b", "c" ]
}
}
}
}
}
Это небольшая проблема, посколькуИнструменты client-codegen генерируют каждое перечисление как свой собственный тип вместо повторного использования определения.Поэтому вместо этого я хотел бы создать swaggerfile, например, так:
{
"definitions": {
"Choices": {
"title": "Field 1",
"type": "string",
"enum": [ "a", "b", "c" ]
},
"SomeObject": {
"required": [ "field_1", "field_2" ],
"type": "object",
"properties": {
"field_1": {
"$ref": "#/definitions/Choices"
},
"field_2": {
"$ref": "#/definitions/Choices"
}
}
}
}
}
Возможно ли включить это поведение в Django Rest Framework?