Валидация данных формы и параметров запроса в одном сериализаторе в APIView в django rest framework

Я использую django rest framework для своего веб-API. В моем post API мне нужно получить данные формы и параметры запроса из запроса и передать их в сериализатор для валидации. Для этого я делаю следующее:

version = request.query_params.get('version', 'v1')
serializer = MySerializer(
            data=request.data, context={'version': version})

и в сериализаторе я обращаюсь к нему следующим образом:

version = serializers.CharField(required=False, default='v1')

и затем обращаюсь к нему в моем APIView как:

if serializer.is_valid():
    data = serializer.validated_data
    print("version: ", data['version'])

Даже если я передаю v2 в качестве параметров запроса, он всегда выводит v1. Что я делаю не так?

Думаю, вы можете попробовать следующее:

sent_data = {
    **request.data, 
    **request.query_params,
}
serializer = YourSerializer(data=sent_data)
serializer.is_valid(raise_exception=True)

Или, если вы хотите передать сериализатору только version параметр запроса, вы можете сделать так:

sent_data = {
    **request.data, 
    "version": request.query_params.get("version", "v1"),
}
serializer = YourSerializer(data=sent_data)
serializer.is_valid(raise_exception=True)
Вернуться на верх