2014-09-10 5 views
0

У меня есть три формы на одной странице с Django. Если я отправляю регистрационную форму или форму оплаты, моя страница всегда отправляет форму для входа. У меня есть одна модельная форма и две стандартные формы в form.py Где моя ошибка?Три формы на одной странице с Django

if request.method == 'POST': 
    login_form = LoginForm(data=request.POST) 
    register_form = RegisterForm(data=request.POST) 
    pay_form = CardForm(data=request.POST) 
    if login_form.is_valid(): 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user=authenticate(username=username,password=password) 
     if user: 
      if user.is_active: 
       login(request,user) 
       return HttpResponseRedirect('/') 
      else: 
       return HttpResponse("Your account is disabled") 
     else: 
      return HttpResponse("Yanlış Kullanici adi ya da şifre") 
    else: 
     return HttpResponse("Login Form is not valid") 
    if register_form.is_valid(): 
     register_form.save() 
    else: 
     return HttpResponse("Register Form is not valid") 
    if pay_form.is_valid(): 
     holder_name = request.POST['holder_name'] 
     card_number = request.POST['card_number'] 
     exp_year = request.POST['exp_year'] 
     exp_month = request.POST['exp_month'] 
     cvv = request.POST['cvv'] 
     satinAl(request,event_id,card_number,holder_name,exp_month,exp_year,cvv) 
    else: 
     return HttpResponse("Pay Form is not valid") 
else: 
    login_form = LoginForm() 
    pay_form=CardForm() 
    register_form = RegisterForm() 
    return render_to_response('index.html', locals(),context_instance=RequestContext(request)) 
+1

Когда POST получен, 'login_form.is_valid' метод сначала вызывается, и он проверяется, который вернет false, если он не заполнен. Остальная часть логики не имеет шансов быть оцененной. См. Этот ответ для подсказок, чтобы решить вашу проблему: http://stackoverflow.com/questions/1395807/proper-way-to-handle-multiple-forms-on-one-page-in-django – mrkre

ответ

0

Вы должны создать 3 теги формы в HTML (шаблон), как это:

<html > 
<body> 
<form acrtion="." method="POST"> 
{{login_form}} 
<input type="submit" name="loginform" value="loginform"> 
</form> 

<form acrtion="." method="POST"> 
{{pay_form}} 
<input type="submit" name="pay_form" value="pay_form"> 
</form> 

<form acrtion="." method="POST"> 
{{register_form}} 
<input type="submit" name="register_form" value="register_form"> 
</form> 

</body> 
</html> 

Затем контроллер:

login_form = LoginForm() 
pay_form=CardForm() 
register_form = RegisterForm() 
if request.method == 'POST': 
    login_form = LoginForm(data=request.POST) 
    register_form = RegisterForm(data=request.POST) 
    pay_form = CardForm(data=request.POST) 

    if 'loginform' in request.POST: 
     if login_form.is_valid(): 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user=authenticate(username=username,password=password) 
     if user: 
      if user.is_active: 
       login(request,user) 
       return HttpResponseRedirect('/') 
      else: 
       return HttpResponse("Your account is disabled") 
     else: 
      return HttpResponse("Yanlış Kullanici adi ya da şifre") 
     else: 
     return HttpResponse("Login Form is not valid") 
    if 'register_form' in request.POST: 
     if register_form.is_valid(): 
     register_form.save() 
     else: 
     return HttpResponse("Register Form is not valid") 
    if 'pay_form' in request.POST: 
     if pay_form.is_valid(): 
     holder_name = request.POST['holder_name'] 
     card_number = request.POST['card_number'] 
     exp_year = request.POST['exp_year'] 
     exp_month = request.POST['exp_month'] 
     cvv = request.POST['cvv'] 
     satinAl(request,event_id,card_number,holder_name,exp_month,exp_year,cvv) 
     else: 
     return HttpResponse("Pay Form is not valid") 

return render_to_response('index.html', locals(),context_instance=RequestContext(request)) 
Смежные вопросы