Данные в request.body не могут быть найдены request.data - Django Rest Framework

Я пишу приложение на django. Я пытаюсь вызвать мой django rest framework извне и ожидаю ответа. Я использую запросы для отправки некоторых данных в функцию в DRF следующим образом:

j=[i.json() for i in AttachmentType.objects.annotate(text_len=Length('terms')).filter(text_len__gt=1)]
j = json.dumps(j)
url = settings.WEBSERVICE_URL + '/api/v1/inference'
headers = {
   'Content-Disposition': f'attachment; filename={file_name}',
   'callback': 'http://localhost',
   'type':j,
   'x-api-key': settings.WEBSERVICE_API_KEY
   }
data = {
   'type':j
   }
files = {
   'file':file
}
response = requests.post(
    url,
    headers=headers,
    files=files,
    json=data,
)

В DRF я использую объект запроса для получения данных.

class InferenceView(APIView):
    """
    From a pdf file, extract infos and return it
    """
    permission_classes = [HasAPIKey]

    def post(self, request):
        print("REQUEST FILE",request.FILES)
        print("REQUEST DATA",request.data)
        callback = request.headers.get('callback', None)
        # check correctness of callback
        msg, ok = check_callback(callback)
        if not ok: # if not ok return bad request
            return build_json_response(msg, 400)

        # get zip file
        zip_file = request.FILES.get('file', None)  
        parsed = json.loads(request.data.get('type', None).replace("'","\""))

Проблема в том, что данные в DRF принимаются неправильно. Все, что я отправляю из requests.post, не принимается. Я отправляю файл и JSON вместе. Файл почему-то принимается, а другие данные - нет. Если я пытаюсь сделать что-то вроде

request.data.update({"type":j})

В DRF JSON корректно добавляется к данным, так что это не проблема с самим JSON, который я пытаюсь отправить. Другое дело, request.body показывает, что JSON каким-то образом присутствует в теле, но request.data не может его найти. Я не хочу использовать request.body напрямую, потому что не могу понять, почему он присутствует в теле, но не виден request.data.

В этой строке

response = requests.post(
    url,
    headers=headers,
    files=files,
    json=data,
)

замените json=data на data=data

вот так:

response = requests.post(
    url,
    headers=headers,
    files=files,
    data=data,
)

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