Многокомпонентные данные Django REST, преобразованные в строку

Передача данных JSON + изображение в конечную точку post заканчивается преобразованием части данных запроса в строку. Часть, преобразованная в строку, также содержит файл. Вот входные данные:

        data = {
        "external": "90000001",
        "sales": [
            {
                "total": 4,
                "quantities": {"xs":2, "s":4},
                "product": {
                    "type": self.type.id,
                    "product_image": {
                        "name": "First test files",
                        "product_files": [
                                {
                                    # "file": base64.b64encode(f.read()).decode(),
                                    "file": test_file,
                                    "description": "Patterns file.",
                                    "type": "pattern_file",
                                }
                            ]
                        },
                    },
                }
            ],
        }

Я посылаю запрос к моей конечной точке в тесте таким образом:

        res: Response = self.client.post(self.create_ext_so_url, data)

Выдает ошибку:

rest_framework.exceptions.ValidationError: {'sales': [ErrorDetail(string='Must specify at least one sales', code='blank')]}

.

Вот данные о продажах, извлеченные в run_validation(...)

    attrs.get("sales", [])
"{'total': 4, 'quantities': {'xs': 2, 's': 4}, 'product': {'type': 1, 'product_image': {'name': 'First test files', 'product_files': [{'file': <SimpleUploadedFile: test.svg (image/svg+xml)>, 'description': 'Patterns file.', 'type': 'pattern_file'}]}}}"

Здесь видно, что продажа преобразуется в строку и в дальнейшем она не будет доступна как объект/словарь и объект не будет создан, что приводит к провалу теста.

Вот вид, если кто-то хочет его проверить.

@action(detail=False, methods=["POST"], url_path="create-sales")
def create_sales_order(self, request: Request)-> Response:
    ser_class = self.get_serializer_class()   
    ser = ser_class(data=request.data)
    ser.is_valid(raise_exception=True)
    ser.save()
    return Response(ser.data, status=HTTP_201_CREATED)

Единственный способ решить эту проблему - иметь отдельные представления для обработки изображений и других текстовых полей. Я не могу видеть ваши представления, но предполагаю, что вы обрабатываете изображения и текстовые поля в одном и том же представлении.

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