Python Django等效于PHP';s形值数组/关联数组

Python Django等效于PHP';s形值数组/关联数组,python,django,forms,Python,Django,Forms,在PHP中,我将这样做以数组的形式获取name <input type"text" name="name[]" /> <input type"text" name="name[]" /> Django对于这些东西的等价物是什么?,尤其是使用 由于视图中的request.POST和request.GET是QueryDict的实例,因此可以执行以下操作: <form action='/my/path/' method='POST'> <input type

在PHP中,我将这样做以数组的形式获取
name

<input type"text" name="name[]" />
<input type"text" name="name[]" />
Django对于这些东西的等价物是什么?

,尤其是使用

由于视图中的request.POST和request.GET是QueryDict的实例,因此可以执行以下操作:

<form action='/my/path/' method='POST'>
<input type='text' name='hi' value='heya1'>
<input type='text' name='hi' value='heya2'>
<input type='submit' value='Go'>
</form>

Django不提供从请求对象获取关联数组(Python中的字典)的方法。正如第一个答案所指出的,您可以根据需要使用
.getlist()
,或者编写一个函数,该函数可以接受
QueryDict
,并根据您的喜好对其进行重新组织(例如,如果某个键与某个
键[*]
模式匹配,则拉出键/值对)。

很抱歉将此挖掘出来,但是Django有一个utils.datastructures.DotExpandedDict。这是它的一部分文档:

>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \
        'person.1.lastname': ['Willison'], \
        'person.2.firstname': ['Adrian'], \
        'person.2.lastname': ['Holovaty']})
>>> d
{'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}}
唯一的区别是使用点而不是括号

编辑:此机制已被表单前缀取代,但如果您仍想使用此概念,可以在应用程序中删除以下旧代码:

当钥匙很重要时,此操作失败。例如name=“question[4]”,其中4是问题id。这是我找到的最佳解决方案。Thx.我在Django应用程序中依赖DotExpandedICT,它比QueryDict.getlist有用得多。不幸的是,它已从Django(至少是开发版本)中删除。尽管如此,您仍然可以从django 1.5中删除.dotExpandedICT。从删除dotExpandedICT以来,有什么好的替代方案吗?是的,有什么想法吗?django队似乎在这里做得不太好
def mypath(request):
    if request.method == 'POST':
        greetings = request.POST.getlist('hi') # will be ['heya1','heya2']
>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \
        'person.1.lastname': ['Willison'], \
        'person.2.firstname': ['Adrian'], \
        'person.2.lastname': ['Holovaty']})
>>> d
{'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}}