Метод DRF PATCH, получил все значения типа строки в request.data

Я отправляю запрос axios.patch с данными формы в vue

axios.patch(`${API_BASE}/products/${id}/`, data, {
  headers: { 'Content-Type': 'multipart/form-data'
}

и вызов частичного обновления Django ModelViewset

    class MyViewSet(viewsets.ModelViewSet):
        def update(self, request, *args, **kwargs):
            data = request.data.copy()
            question = self.get_object()
            ...

проблема в том, что я получаю все значения в строковой форме. Нулевые значения как «нулевые», целочисленные значения как «1» и т. д. введите здесь описание изображения

Что мне делать, чтобы получить нормальные значения (null как None, integer как int) в request.data?


person Zhussipnazar Daulet    schedule 05.03.2018    source источник
comment
Используйте сериализатор и установите partial=True в инициализации сериализатора. Например: serializer = YourSerializer(request, data=request.data, partial=True)   -  person zaidfazil    schedule 05.03.2018
comment
@zaidfazil Спасибо за ответ, но вопрос в том, что я получаю нулевые значения как строку типа «нуль» в request.data. Что мне делать, чтобы получать нулевые значения как None в request.data?   -  person Zhussipnazar Daulet    schedule 05.03.2018
comment
request.data всегда QueryDict. Сериализаторы используются для интерпретации данных из запроса. Напишите сериализатор для ваших данных, и validated_data из сериализатора будет тем, что вы можете использовать.   -  person zaidfazil    schedule 05.03.2018
comment
@zaidfazil понял тебя, спасибо!   -  person Zhussipnazar Daulet    schedule 06.03.2018


Ответы (2)


Что мне делать, чтобы получить нормальные значения (null как None, integer как int) в request.data?

Либо используйте JSON, либо используйте проверенные данные сериализатора. HTML-формы отправляются в виде строк в виде пар ключ/значение.

person Linovia    schedule 05.03.2018
comment
Привет, спасибо за ваш ответ. Я не могу использовать JSON, потому что моя форма содержит изображения, и я не могу получить проверенные данные, потому что я переопределяю метод обновления ModelViewset и получаю request.data для выполнения некоторых манипуляций. - person Zhussipnazar Daulet; 05.03.2018
comment
Так что это зависит от того, что вы сами делаете гипс. - person Linovia; 05.03.2018

решил это, установив нулевые значения как пустые строки перед методом исправления и установив allow_null=True в сериализаторах

person Zhussipnazar Daulet    schedule 05.03.2018