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". Также включите резюме после имен примеров.

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