2011-05-04 81 views
13

我怎麼會呼籲以下多重提交表單 -引用多個提交按鈕在Django

<form action="/" method="post"> 
    {% csrf_token %} 

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td> 
    <td><input type="submit" value="Edit"></td> 
    <td><input type="submit" value="Delete"></td> 
</tr> 
</form> 

我想要做這樣的事情 -

if value = edit: 
    do this 

if value = delete: 
    do this 

我怎麼會在這個代碼views.py文件?

回答

29

給輸入類型一個名字,並在您的request.POST字典中查找它們。

例如爲:

<form action="/" method="post"> 
    {% csrf_token %} 

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td> 
    <td><input type="submit" value="Edit" name="_edit"></td> 
    <td><input type="submit" value="Delete" name="_delete"></td> 
</tr> 

和views.py像

if request.POST: 
    if '_edit' in request.POST: 
     do_edit() 
    elif '_delete' in request.POST: 
     do_delete() 

編輯:改變d.has_key(k)k in d每丹尼爾的評論。 has_key在python 3.0中被棄用,而in style被優先考慮,因爲它更通用 - 特別是d.has_key(k)在d不是字典時失敗,但k in d適用於任何可迭代的d(例如字典,字符串,元組,列表,集合)。

+2

自Python 2.4以來,'foo.has_key('bar')'已被拼寫爲foo中的'bar'。 – 2011-05-04 07:58:42

+0

@Daniel:謝謝 - 解釋爲什麼'k in d'是首選的,因爲它適用於任何可迭代的d。 – 2011-05-04 14:03:39

+2

請記住,如果表單中有多個提交按鈕,並且用戶按下Enter,則會自動單擊HTML中第一個出現的按鈕。 – 2011-05-05 15:52:01

4

你就需要給提交按鈕的名稱屬性,例如說「動」,那麼你就可以在request.POST集合中引用它們:

def my_view(request): 
    action = request.POST.get('action') 
    if action == 'Edit': 
     #do edit 
    else: 
     # do delete 

希望有所幫助你。

+0

標題的變化,例如後會打破國際化。雖然可以使用'

0
<form action="/" method="post"> 
<tr> 
    <td><input type="text" name="{{ email.id }}" value=" {{email}}"></td> 
    <td><input type="submit" value="Edit" name="submit"> </td> 
    <td><input type="submit" value="Delete" name="submit"> </td> 
</tr> 
</form> 

views.py會 -

def our_view(request): 
    if request.POST.get('submit') == 'Edit': 
     make_edit() 
    elif request.POST.get('submit') == 'Delete': 
     make_deletes() 
    else: 
     raise Http404() 
+0

我不認爲這有效。看看你的'request.POST'字典。它將由'{'3':'[email protected]','編輯':'編輯'}'組成。就像你不能通過從request.POST獲取'text'來引用電子郵件地址一樣,你需要提供輸入按鈕的名字來獲取它們的值。 – 2011-05-04 14:36:22

6

我知道這個問題被問得很久以前,但對於這裏的戰績是使用基於類的視圖的解決方案。它使用與jimbob博士的回答相同的html。

from django.views.generic.edit import FormView 

class MyView(FormView): 
    template_name = 'mytemplate.html' 
    form_class = MyForm 

    def form_valid(self, form): 
     if '_delete' in self.request.POST: 
      # do delete 
     elif '_edit' in self.request.POST: 
      # do edit 

form_valid默認行爲是:

return HttpResponseRedirect(self.get_success_url()) 
+0

我用''如果「鍵」在form.data中:form.instance.field = special_value'' – 2017-06-08 14:54:37