Opened 5 years ago

Last modified 4 years ago

#22079 new Bug

TestClient serialization of GET params with empty list as value

Reported by:… Owned by: nobody
Component: Testing framework Version: master
Severity: Normal Keywords:
Cc: gregchapple1@…, Florian Apolloner Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no


When POST-ing a parameter whose value is the empty list, TestClient will strip that param-value pair out of the request entirely. In contrast to GET, which passes these along.

Expected behaviour:
They should work the same in the face of an empty list value.

See: for a patch making POST behave as GET.

Change History (5)

comment:1 Changed 5 years ago by Aymeric Augustin

Triage Stage: UnreviewedAccepted

As noted on the pull request, we may want to fix GET rather than POST.

In any case, they should behave similarly.

comment:2 Changed 5 years ago by Tim Graham

Patch needs improvement: set

comment:3 Changed 5 years ago by Greg Chapple

Cc: gregchapple1@… added

What is the desired behaviour here?

From what I can see, the difference lies with using django.utils.http.urlencode to process the get params.

>>> from django.utils.http import urlencode

>>> data = {'test': ['value1', 'value2']
>>> urlencode(data, doseq=True) 

>>> data = {'test': []}
>>> urlencode(data, doseq=True)

comment:4 Changed 4 years ago by Florian Apolloner

Cc: Florian Apolloner added

From my gut I'd say that empty lists should get stripped out entirely, cause there is no way to represent an empty list, "?test=" would be interpreted as a list with one empty item in .getlist which makes no sense.

comment:5 Changed 4 years ago by Collin Anderson

Summary: TestClient serialization of POST params with empty list as valueTestClient serialization of GET params with empty list as value
Note: See TracTickets for help on using tickets.
Back to Top