从Django中的POST请求中读取多维数组

我有一个jquery客户端发送带有多维数组的POST请求,如下所示:

friends[0][id] 12345678 friends[0][name] Mr A friends[1][id] 78901234 friends[1][name] Mr B 

也就是说,一个包含两个项目的数组,name和id。

是否有自动方式接收此输入作为列表或字典? 我似乎无法使.getlist工作

这与该问题有关 。 如上所述,我为Django / Python创建了特殊的库来处理通过请求发送的多维数组。 你可以在GitHub上找到它。

DrMeers的链接不再有效,所以我将发布另一种实现相同function的方法。 它也不完美,如果Django内置了这样的function会更好。 但是,因为它没有:

在Django中转换多维表格数组

免责声明:我写了这篇文章。 它的本质是在这个函数中,它可以更健壮,但它适用于一级对象的数组:

 def getDictArray(post, name): dic = {} for k in post.keys(): if k.startswith(name): rest = k[len(name):] # split the string into different components parts = [p[:-1] for p in rest.split('[')][1:] print parts id = int(parts[0]) # add a new dictionary if it doesn't exist yet if id not in dic: dic[id] = {} # add the information to the dictionary dic[id][parts[1]] = post.get(k) return dic 

这有帮助吗? http://dfcode.com/blog/2011/1/multi-dimensional-form-arrays-and-django/

如果您想要POST数据,获得它的唯一方法是指定您要查找的确切“名称”:

  person[1].name = request.POST['person[1][name]'] person[1].age = request.POST['person[1][age]'] person[2].name = request.POST['person[2][name]'] person[2].age = request.POST['person[2][age]'] 

当您需要提取表单值而不显式键入全名作为字符串时,这是Python中的快速动态解决方法:

  person_get = lambda *keys: request.POST[ 'person' + ''.join(['[%s]' % key for key in keys])] 

现在,当您需要信息时,抛出其中一个吸盘,您将拥有更大的灵活性。 快速举例:

  person[1].name = person_get('1', 'name') person[1].age = person_get('1', 'age') person[2].name = person_get('2', 'name') person[2].age = person_get('2', 'age')