Как получить доступ к данным запроса, отправленным в виде формы-данных в рест-фреймворк Django

Я отправляю POST запрос с телом в виде FormData из моего flutter приложения в мой Django backend. В теле есть и MultiPart Files и String, но когда я пытаюсь получить доступ к данным в моем backend некоторые из них не доступны. Вот мой код :

flutter form-data body

    FormData form = FormData({
      "mobile_number": supplierMobileController.text,
      "password": supplierPasswordController.text,
      "firebase_token": "123456789",
      "main_user": {
        "username": supplierMobileController.text,
        "password": "123456789"
      },
      "client_object": null,
      "supplier_object": {
        "personal_name": supplierPersonalNameController.text,
        "company_name": supplierCompanyNameController.text,
        "email": supplierEmailController.text,
        "established": supplierMonthController.text.length == 2
            ? "${supplierYearController.text}-${supplierMonthController.text}-01"
            : "${supplierYearController.text}-0${supplierMonthController.text}-01",
        "number_of_projects": supplierNumberOfProjectsController.text,
        "tax_id": MultipartFile(File(imageOne.value),
            filename: "${supplierCompanyNameController.text}_tax_image.png"),
        "company_logo": MultipartFile(File(imageTwo.value),
            filename: "${supplierCompanyNameController.text}_logo_image.png"),
        "business_register": MultipartFile(File(imageThree.value),
            filename:
                "${supplierCompanyNameController.text}_business_image.png"),
        "company_text": ""
      },
    });

и вот как я пытаюсь получить доступ к этим данным в бэкенде :

Django Backend function

@permission_classes(["AllowAny"])
@parser_classes(["JSONParser"])
@api_view(['POST'])
def create_new_supplier(request):
    '''
    Handles API call to create a new supplier
    '''
    data = {}
    if request.method == 'POST':
        main_user_serializer = MainUserSerializer(data=request.data['main_user']) # causes an error
        main_user_serializer.is_valid(True)
        main_user_data = main_user_serializer.data
        app_user_serializer = AppUserSerializer(data=request.data)
        app_user_serializer.is_valid(True)
        validated_data = app_user_serializer.data
        supplier_serializer = models.Supplier(data=request.data['supplier_object'])
        supplier_serializer.is_valid(True)
        supplier_object_data = supplier_serializer.data
        main_user_object = User.objects.create_user(**main_user_data)
        app_user = models.AppUser.objects.create(**validated_data)
        token_object = Token.objects.create(user=main_user_object)
        supplier_object = models.Supplier.objects.create(**supplier_object_data)
        app_user.token = token_object
        app_user.client_object = None
        app_user.supplier_object = supplier_object
        app_user.main_user = main_user_object
        app_user.is_active = False
        app_user.save()
        data = {
            "success" : True,
            "details":AppUserSerializer(app_user).data,
        }
        return Response(data, headers=get_headers())

строка main_user_serializer = MainUserSerializer(data=request.data['main_user']) вызывает эту ошибку :

    raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'main_user'

Рекомендуется отправлять данные, представляющие собой словарь

"main_user": json.encode({
    "username": supplierMobileController.text,
    "password": "123456789"
  }),

а в обратную сторону лучше получать данные так

main_user_serializer=MainUserSerializer(data=json.loads(request.data.get('equipo')))
Вернуться на верх