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

时间:2011-03-02 16:00:37

标签: jquery django post

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

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

即两个项目的数组,名称和ID。

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

3 个答案:

答案 0 :(得分:7)

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

Converting Multi-dimensional Form Arrays in 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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

这有帮助吗? 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')