2009-10-26 88 views
2

我有这个输入的形式:Django和HTML阵列

<input name="person[name]" value=""> 
<input name="person[surname]" value=""> 
<input name="person[age]" value=""> 

当我提交,我怎样才能分配该HTML数组变量,导致request.POST.getlist(“人”)没有按”将不起作用,我被检查的其他职位,但我唯一发现并没有什么有用的

THEAD

我希望有人可以帮助我找到答案,造成读取文档,并没有完全得到做的方式...


的事情是,我有一个表在我的数据库有折扣......,每一个折扣有一个默认值...所以我做到了

discounts = Discount.objects.all() 

{% for i in discounts %} 
<input name="discount[{{ i.id }}]" value="{{ i.default_value }}"> 
{% endfor %} 

,并在我的我没有任何方法捕捉我发送的html数组...任何建议?

+0

即将形式PHP这是多种经营形态的一个相当直观的方式和阵列。不真的看到这种自动分析的缺点。可以很容易地看到django允许request.POST.get('person',{})。get('surname','') – Mikhail 2013-05-08 19:02:18

+0

对于具有相同名称的多个输入,您可以使用request.POST.getlist(...) – Mikhail 2013-05-09 04:00:06

回答

1

这似乎不是一个非常pythonic的方式来做到这一点。或者甚至是django-nic的方式来做到这一点。

http://docs.djangoproject.com/en/dev/topics/forms/

我还没有真正做了很多的东西,形式和Django还没有,但是这看起来将是有益的自动生成,验证等方面

1

如果你定义在模板中以这种方式形成,您无法直接将其映射到字典。

你应该获得各自的数值仅

request.POST['person[name]'] 

然而,这是没有办法在Django使用形式。按照Django表单声明语法(docs),你还是定义这些领域,并让Django的使用类似这样的标记处理模板中的渲染:

{{form.as_p}} 
{{form.as_table}} 

这样的话,你可以在窗体类定义save方法执行你的“数组映射”功能。如果你想把它映射到一个定义好的模型,那么这个库存就会被放入库里,并且你的表单应该延伸到ModelForm,以获得这个优势。

+0

事情是,我有一个在我的数据库折扣表...每个折扣有一个默认值... 所以我{在折扣%%对于i} <输入名称= “折扣[{{i.id}}]” 值= “{{i.default_value}}”> 和我视图使它 我没有任何方法来捕捉我发送的HTML数组...任何建议? – 2009-10-26 14:26:19

+0

您应该创建一个模型表单或表单,并根据需要将初始字典传递给它。上面提到的文档可以提供帮助。如果您需要任何特定的帮助,请提出一个单独的问题,或更新此问题。 – 2009-10-26 14:56:26

4

对不起回答这样一个老问题,但我坚持相同的问题,并没有找到任何可接受的答案。所以,这里是我的解决方案:

def get_post_dict(post, key): 
    result = {} 
    if post: 
     import re 
     patt = re.compile('^([a-zA-Z_]\w+)\[([a-zA-Z_\-][\w\-]*)\]$') 
     for post_name, value in post.items(): 
      value = post[post_name] 
      match = patt.match(post_name) 
      if not match or not value: 
       continue 
      name = match.group(1) 
      if name == key: 
       k = match.group(2) 
       result.update({k:value}) 
    return result 

现在你可以使用这样的:

persons = get_post_dict(request.POST, 'person') 
... 

django.http.QueryDict.getdict = get_post_dict 
persons = request.POST.getdict('person') 
+0

你确定Django没有实现这样一个有用的东西吗? – Mahdi 2013-09-20 05:50:21