Question Details

No question body available.

Tags

python django django-rest-framework django-views django-rest-viewsets

Answers (1)

Accepted Answer Available
Accepted Answer
June 4, 2026 Score: 1 Rep: 151,307 Quality: High Completeness: 60%

I made minimal working code for test it and it seems problem makes .dict() in

requestdata = request.data.dict()

It creates dictionary with single file (even if there are more files) - like this

{'file
list': }

but code needs list (even if there is only one file) - like this

{'filelist': [, ]}

(so later it treats this single file as list of objects and it creates so many wrong items in response)

Code works correctly if I skip .dict()

request
data = request.data

or I use standard dict(...) if you really need standard dict instead of QueryDict

requestdata = dict(request.data)

{'filelist': [, ]}>

Works also with requests.FILES

requestdata = {"filelist": request.FILES.getlist("filelist")}

Other problem is in lines

file
list = data.get("filelist") uploadedfiles = data.pop(filelist)

It has to be string "filelist" instead of variable filelist

# no need to use data.get() uploaded
files = data.pop("filelist")

Full class used for tests

class PostImageValidate(APIView): # permission
classes = (IsAuthenticated, IsNotSuspended)

def put(self, request): print("\n=== put ===\n")

print("=== request.data ===") print(request.data)

print("=== request.data.dict() ===") print(request.data.dict())

print("=== request.data.lists() ===") print(request.data.lists()) print(list(request.data.lists()))

print("=== dict(request.data) ===") print(dict(request.data))

print('=== request.FILES.getlist("filelist") ===') print(request.FILES.getlist("filelist"))

# requestdata = request.data.dict() # WRONG # requestdata = dict(request.data) requestdata = request.data # requestdata = {"filelist": request.FILES.getlist("filelist")}

print("=== requestdata ===") print(requestdata)

serializer = TempImageSerializer(data=requestdata) serializer.isvalid(raiseexception=True)

data = serializer.validateddata # uploadedfiles = data.pop("filelist") uploadedfiles = data.get("filelist")

print("=== uploadedfiles ===") print(uploadedfiles)

results = []

for file in uploadedfiles: results.append( {"filename": file.name, "size": file.size, "status": "Processed"} )

output = { "message": "Images processed successfully", "results": results, "number of items": len(results), }

return Response(output, status=status.HTTP201CREATED)


I tested it with curl in console (on Linux Mint)

curl -X PUT \ -F "file
list=@lenna.jpg" \ -F "file_list=@lenna.png" \ -F "other=Hello World!" \ http://127.0.0.1:8000/api/upload/