The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS

PythonDjango

Python Problem Overview


I got an error: "The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS".

Error says that TooManyFieldsSent at /api/upload.

I wrote in my views.py.

def upload(request):
    id, array = common(request)

    if request.FILES:
        file = request.FILES['req'].temporary_file_path()
    else:
        return HttpResponse('<h1>NG</h1>')

    return HttpResponse('<h1>OK</h1>')

def common(request):
    id = json_body.get("access", "0")
    if id == "":
        id = "0"

    s = []
    with open(ID_TXT, 'r') as f:
        for line in f:
            s += list(map(int, line.rstrip().split(',')[:-1]))

    array = [s[i:i + 2] for i in range(0, len(s), 2)]

    return id, array

I post access & req data by using POSTMAN like: enter image description here

I think this error is limitation of being able to send file size, so I added the code to settings.py

DATA_UPLOAD_MAX_MEMORY_SIZE = 100000000

But the error didn't solved. I read this page: https://stackoverflow.com/questions/44745355/how-to-avoid-the-number-of-get-post-parameters-exceeded-error as a reference. How should I fix this?

Python Solutions


Solution 1 - Python

as django's doc says, the value of DATA_UPLOAD_MAX_NUMBER_FIELDS is default 1000, so once your form contains more fields than that number you will get the TooManyFields error.

check out here: https://docs.djangoproject.com/en/stable/ref/settings/

so the solution is simple I think, if DATA_UPLOAD_MAX_NUMBER_FIELDS exists if your settings.py, change it's value to a higher one, or, if it doesn't, add it to settings.py:

DATA_UPLOAD_MAX_NUMBER_FIELDS = 10240 # higher than the count of fields

Solution 2 - Python

This happened when I tried posting a huge list values to Backend. In my case I had the liberty of sending the list as a string, and it worked. Django by default has this check to prevent Suspicious activity(SuspiciousOperation).

However below setting will also work.

# to disable the check
DATA_UPLOAD_MAX_NUMBER_FIELDS = None

You can set this to None to disable the check. Applications that are expected to receive an unusually large number of form fields should tune this setting. From Django official documentation. https://docs.djangoproject.com/en/3.1/ref/settings/#data-upload-max-number-fields

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser8817477View Question on Stackoverflow
Solution 1 - PythonYun LuoView Answer on Stackoverflow
Solution 2 - PythonSuperNovaView Answer on Stackoverflow