2016-02-26 131 views
1

我試着去獲得價值形成Django的一個職位,但它傳遞一個空場`高清PersonEmail(請求):POST不工作

我試着去獲得價值形成Django的一個職位,但它傳遞一個空現場`高清PersonEmail(請求):

if request.method == "POST": 
    form1 = PersonForm(request.POST, prefix="form1") 
    form2 = EmailForm(request.POST, prefix="form2") 
    name = form2['email'].value 
    return HttpResponse(name) 
else: 
    form1 = PersonForm() 
    form2 = EmailForm() 
    return render(request, 'CreatePersonEmail.html', locals())` 

,但是當我把它們分開,即

Im trying to get the value form a post in django but it pass an empty field `def PersonEmail(request): 

if request.method == "POST": 
    # form1 = PersonForm(request.POST, prefix="form1") 
    form2 = EmailForm(request.POST, prefix="form2") 
    name = form2['email'].value 
    return HttpResponse(name) 
else: 
    form1 = PersonForm() 
    form2 = EmailForm() 
    return render(request, 'CreatePersonEmail.html', locals())` 

它給我的字段的值。

爲什麼?我怎樣才能讓它獲得這兩個表單字段的值?

回答

1

基本上,你做錯了。

首先,您需要檢查表單是否有效。用戶可以輸入任何廢話,你不想讓他們做到這一點:

if request.method == "POST": 
    form = MyForm(request.POST) 
    if form.is_valid(): 
     # Now you can access the fields: 
     name = form.cleaned_data['name'] 

如果表單是無效的,只是傳遞迴render(),它會顯示錯誤。

而且,不這樣做:

return render(request, 'CreatePersonEmail.html', locals())` 

建立你的語境詞典得當,不要用locals(),這是哈克,你污染你的背景。

所以,一個完整的視圖可能是這樣的(從Django文檔拍攝和修改一下:

def get_name(request): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = NameForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      name = form.cleaned_data['name'] 
      return render(request, 'some_page.html', {'name': name}) 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = NameForm() 

    return render(request, 'name.html', {'form': form}) 
+0

好的,我看到了問題,我明白了,我修改了代碼並做了一些類似上面顯示的內容,但是當它驗證表單時,請勿通過,並且所有字段都是正確的:/ –

0

您在實例化表單時都需要使用前綴;都在GET和POST上。

此外,您可以從表單的cleaned_data字典中獲取值,而不是來自字段。

+0

IM仍然有第二種形式的問題,現在我得到的值形成的第一個,但人仍下落不明第二個人 –