2009-10-26 45 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