I'm sending a POST request with a body as FormData from my flutter
application to my Django
backend.. the body has both MultiPart Files
and String
but when I try to access data in my backend some of them are not accessible.. here is my code:
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": ""
},
});
and this is how am trying to access this data in the backend:
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())
the line main_user_serializer = MainUserSerializer(data=request.data['main_user'])
causes this error:
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'main_user'
I recommend you send the data that is a dictionary
"main_user": json.encode({
"username": supplierMobileController.text,
"password": "123456789"
}),
and in back it is better to receive the data like this
main_user_serializer=MainUserSerializer(data=json.loads(request.data.get('equipo')))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.