Drf-spectacular extend_schema_serializer не может выполнить пример с пустым значением
Я использую декоратор extend_schema_serializer для документирования примеров json-данных, которые могут быть отправлены в POST-запросе. Проблема в том, что одна из вариаций/примеров не требует никаких данных, но сгенерированный swagger doc настаивает на показе того, что выглядит как автоматически сгенерированный default с всеми возможными параметрами. Это не идеально, когда я пытаюсь продемонстрировать самые простые примеры.
У меня есть это для сериализатора.
@extend_schema_serializer(
examples=[
OpenApiExample(
'Simple example',
value={},
request_only=True,
response_only=False,
),
OpenApiExample(
'Single param example',
value={
'mult': 3,
},
request_only=True,
response_only=False,
),
],
)
class RollChartSerializer(serializers.Serializer):
mult = serializers.IntegerField(required=False, write_only=True)
input_vars = serializers.DictField(required=False, write_only=True)
foo_name = serializers.CharField(source="foo", allow_null=True, read_only=True)
foo_url = ChartAbsoluteUrlField(source="foo.id", allow_null=True, read_only=True)
results = serializers.StringRelatedField(many=True, read_only=True)
...
Там, где у меня есть value={}, я также пробовал value=None и пробовал удалить его совсем. Во всех случаях "пример значения" в swagger показывает.
{
"mult": 0,
"input_vars": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
}
Есть ли что-то, что я упускаю?
Я заметил, что в сгенерированных документах redoc показан null.
Для второго примера swagger правильно показывает
{
"mult": 3
}
Я не совсем уверен, связаны ли они, но у меня был похожий результат, когда я использовал @extend_schema_serializer с вложенным сериализатором следующим образом:
@extend_schema_serializer(
examples=[
OpenApiExample(
'Simple example',
value=some data,
request_only=True,
response_only=False,
),
OpenApiExample(
'Single param example',
value={another data,},
request_only=True,
response_only=False,
),
],
)
class UserSerializer(serializers.Serializer):
email = serializers.EmailField()
username = serializers.CharField(max_length=100)
class CommentSerializer(serializers.Serializer):
user = UserSerializer()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()
Правильный способ выглядит следующим образом:
class UserSerializer(serializers.Serializer):
email = serializers.EmailField()
username = serializers.CharField(max_length=100)
@extend_schema_serializer(
examples=[
OpenApiExample(
'Simple example',
value=some data,
request_only=True,
response_only=False,
),
OpenApiExample(
'Single param example',
value={another data,},
request_only=True,
response_only=False,
),
],
)
class CommentSerializer(serializers.Serializer):
user = UserSerializer()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()
Я не уверен, что это поможет, но вы можете включить "required=False" во все ваши поля "RollChartSerializer". Также включите резюме после имен примеров.