django – getlist()

Question:

I just posted this question jQuery – passing arrays in post request, where I don’t to send arrays in post request, but there is no problem in jQuery code.

The problem is with receiving the POST request in django. I did like this.

def portfolio_add(request):
    ukeys = request.POST.getlist('ukeys')
    ........etc.......

But I’m getting ukeys values as u'[]'. When I checked with just request.POST I got the values as u"<QueryDict: {u'ukeys[]': [u'68c04', u'16149']}>"

So, How to get those values as a list in Django?

Thanks!

Asked By: rnk

||

Answers:

jQuery POST’s arrays with the [] suffix because PHP and some web frameworks understand that convention, and re-build the array on the server-side for you automatically. Django doesn’t work that way, but you should be able to access the data via:

ukeys = request.POST.getlist('ukeys[]')
Answered By: Jakub Roztocil

I encountered this same issue — Jakub is right, the [] is useful for other web frameworks, but the behavior of jQuery can be changed (I didn’t like the varname[] format).

The $.param function is specifically what does this and it also accepts a parameter to override this behavior.

Change Globally:

// put this early in your JS, preferably the first one imported after jQuery
//     or before the document.ready function if using inline js
jQuery.ajaxSettings.traditional = true; 

Change on a per-call basis:

 $.param(data, true);  // true sets traditional mode
// for example:
 $.post('/some/url/', $.param(data, true)).done(callback)

Or of course you can use the [] on the server as Jakub mentions.

Answered By: Kasapo
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.