Django REST Framework MultiPartParser разбирает JSON как строку

Я делаю функциональное представление на основе django, где запрос содержит некоторый JSON и файл. Использование DRF's MultiPartParser разбирает JSON-секцию запроса как строку. Что я могу сделать, чтобы исправить это?

Вот вид:

from rest_framework.response import Response
from rest_framework.request import Request
from rest_framework.parsers import MultiPartParser

@api_view(['POST'])
@parser_classes([MultiPartParser])
def import_files(request: Request) -> Response:
    data = request.data
    print(type(data['json']))

    return Response("Success", status=200)

и вот запрос клиента с использованием python requests:

import requests
import json

multipart_payload = [
    ('json', (None, json.dumps(payload), 'application/json')),
    ('file', ('test.xlsx', open('test.xlsx', 'rb'), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
]

put_response = requests.post(endpoint + "feature/", files=multipart_payload)
print(put_response.json())

Я пробовал добавить JSONParser к декоратору @parser_classes, но это не помогло. Если кто-то сталкивался с подобной проблемой, любая помощь была бы очень кстати, спасибо

MultiPartParser используется для обработки multipart/form-data, поэтому JSONParser, который обрабатывает application/json, может не работать.

Вы можете использовать следующее:-

import json

@api_view(['POST'])
@parser_classes([MultiPartParser])
def import_files(request: Request) -> Response:
    data = request.data
    if 'json' not in data:
        return Response("Failure", status=400)
    
    json_data = json.loads(data['json'])
    print(type(json_data))    #Should give 'class <dict>'

    return Response("Success", status=200)
Вернуться на верх