How to handle request.GET with multiple variables for the same parameter in Django

You want the getlist() function of the GET object:

request.GET.getlist('myvar')

Another solution is creating a copy of the request object... Normally, you can not iterate through a request.GET or request.POST object, but you can do such operations on the copy:

res_set = request.GET.copy()
for item in res_set['myvar']:
    item
...

When creating a query string from a QueryDict object that contains multiple values for the same parameter (such as a set of checkboxes) use the urlencode() method:

For example, I needed to obtain the incoming query request, remove a parameter and return the updated query string to the resulting page.

# Obtain a mutable copy of the original string
original_query = request.GET.copy()

# remove an undesired parameter
if 'page' in original_query:
    del original_query['page']

Now if the original query has multiple values for the same parameter like this: {...'track_id': ['1', '2'],...} you will lose the first element in the query string when using code like:

new_query = urllib.parse.urlencode(original_query)

results in...

...&track_id=2&...

However, one can use the urlencode method of the QueryDict class in order to properly include multiple values:

new_query = original_query.urlencode()

which produces...

...&track_id=1&track_id=2&...