2016-02-26 132 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仍然有第二种形式的问题,现在我得到的值形成的第一个,但人仍下落不明第二个人 –