2017-05-24 3 views
0

장고 1.11을 배우고 있는데 widget_tweaks 도구로 양식을 만들고 있습니다.form.is_valid() always false

양식을 보내거나 보낼지 여부를 알려주는 변수 "code"가 있습니다. 는이 전송되지 있다면, 코드 = 1과 양식이 양식이 표시되면, 난 그냥 (지금은 개발되지 않은) 다른 형태

문제가 표시하고 싶은 표시되는 코드는 항상 = 1

입니다

왜?

많은 감사

view.py

#-*- coding: utf-8 -*- 
 
from django.shortcuts import render 
 
from .forms import MinimumRegisterForm 
 

 
# Create your views here. 
 
def view_about(request): 
 
\t return render(request, 'about.html', locals()) 
 

 
def view_first(request): 
 
\t return render(request, 'first.html', locals()) 
 

 
def view_second(request): 
 
\t form = MinimumRegisterForm() 
 
\t if request.method == 'POST': 
 
\t \t form = MinimumRegisterForm(request.POST) 
 
\t \t if form.is_valid(): 
 
\t \t \t identifiant = form.cleaned_data['identifiant'] 
 
\t \t \t email = form.cleaned_data['email'] 
 
\t \t \t password = form.cleaned_data['password'] 
 
\t \t \t confirm_password = form.cleaned_data['confirm_password'] 
 
\t \t \t code = "2" 
 
\t else: 
 
\t \t code = "1" 
 
\t \t return render(request, 'second.html', locals()) 
 
\t return render(request, 'second.html', locals())

템플릿 HTML

  <div class="inner cover"> 
 
      <h1 class="cover-heading">Parlons un peu de vous ...</h1> 
 
      <div class="MinimumRegisterForm"> 
 
       {% if form.errors %} 
 
       Les erreurs suivantes sont survenues: 
 
       {{ form.errors }} 
 
       {% endif %} 
 
       {% if code == "1" %} 
 
       <form action="{% url 'second' %}" action="POST"> 
 
        {% csrf_token %} 
 
        <p>{{ form.identifiant|add_class:"form-control"|attr:"placeholder:Quel sera votre identifiant unique ?" }}</p> 
 
        <p>{{ form.email|add_class:"form-control"|attr:"placeholder:Indiquez-y votre email !" }}</p> 
 
        <p>{{ form.password|add_class:"form-control"|attr:"placeholder:Créer votre mot de passe ici." }}</p> 
 
        <p>{{ form.confirm_password|add_class:"form-control"|attr:"placeholder:Retaper votre mot de passe." }}</p> 
 
        <input class="btn btn-lg btn-primary" type="submit" value="Continuer"> 
 
       </form> 
 
       {% elif code == "2" %} 
 
       <p>Formulaire suivant</p> 
 
       {% endif %} 
 
       {{ code }}    
 
      </div> 
 
      </div>

Forms.py

+0

어떤'form.errors'? .. – Sayse

+0

미안 해요, 난 장고의 멍청한 놈이와 나는 정말 – GrandGTO

+0

@GrandGTO 내가 내 대답 – doru

답변

0

첫째

from django import forms 
 

 
class MinimumRegisterForm(forms.Form): 
 
    identifiant = forms.CharField(
 
     max_length=50, 
 
     label="Choisissez un identifiant unique", 
 
    ) 
 
    email = forms.EmailField(
 
     label="Votre adresse mail", 
 
    ) 
 
    password = forms.CharField(
 
     widget=forms.PasswordInput, 
 
     label="Entrer un mot de passe", 
 
    ) 
 
    confirm_password = forms.CharField(
 
     widget=forms.PasswordInput, 
 
     label="Confirmer votre mot de passe", 
 
    )
, 둘째, 당신이에, POST의 경우에만하는 POST 요청 if request.method == 'POST' 있는지 확인해야하고, 바로보기 def 노호 form = MinimumRegisterForm()를 추가하고 양식을 처음 렌더링 할 때 양식에 데이터를 바인딩하십시오. 양식이 비어 있지만 아직 소개되지 않은 데이터 인 POST을 얻으려고하면 오류가 발생합니다.
from django.shortcuts import render 
from .forms import MinimumRegisterForm 

def view_second(request): 

    if request.method == 'POST': 
     form = MinimumRegisterForm(request.POST) 
     if form.is_valid(): 
      identifiant = form.cleaned_data['identifiant'] 
      email = form.cleaned_data['email'] 
      password = form.cleaned_data['password'] 
      confirm_password = form.cleaned_data['confirm_password'] 
      code = "2" 
      form = MinimumRegisterForm() 
      return render(request, 'second.html', {'code': code, 'form': form}) 
    else: 
     form = MinimumRegisterForm() 
     code = "1" 
     return render(request, 'second.html', {'code': code, 'form': form}) 

하지만 실제 응용 프로그램에서 당신은 @Daniel Roseman 자신의 응답을 보여줍니다처럼 대신 당신은 단지 템플릿 (있는 경우) 오류를 표시, code = "1" and code = "2" 사용하지 마십시오.

+0

확인 업데이트되었습니다 ... form.errors 무엇인지 모른다 이 코드의 논리를 이해합니다. 그러나 지금은 내 변수 코드를 사용하여 오류를보고하는 대신 양식을 보냈는지 여부를보고합니다. 전송 된 경우 code = 2이고 템플릿은 다른 폼을 표시하고 그렇지 않은 경우 code = 1로 MinimumRegisterForm이 표시됩니다. 문제는 양식을 보냈지 만 코드는 항상 1입니다. 이유는 무엇입니까? – GrandGTO

+0

@GrandGTO 나는 메시지를 보내기 위해 응답과 bty를 업데이트했다. ['messages'] (https://docs.djangoproject.com/en/1.11/ref/contrib/messages/) 프레임 워크를 사용할 수 있어야한다. – doru

+0

메시지는 사용자에게 메시지를 보냅니다. 난 그냥 내 var "코드"2 "1"의 inspite로 바꾸고 싶습니다. – GrandGTO

4

장고 (Django) 양식 사용의 요점은 문제가 무엇인지 스스로에게 알려주는 것입니다. 0 또는 1 만 제공하는 무의미한 "코드"변수를 사용하는 대신 템플릿에 오류를 표시하는 양식을 가져와야합니다. 양식을 다시 표시하면 사용자가 이러한 오류를 수정할 수 있습니다.

<div class="MinimumRegisterForm"> 
     <p>Formulaire suivant</p> 
     {% if form.errors %} 
     Les erreurs suivantes sont survenues: 
     {{ form.errors }} 
     {% endif %} 
     <form action="{% url 'second' %}" action="POST"> 
      {% csrf_token %} 
      <p>{{ form.identifiant|add_class:"form-control"|attr:"placeholder:Quel sera votre identifiant unique ?" }}</p> 
      <p>{{ form.email|add_class:"form-control"|attr:"placeholder:Indiquez-y votre email !" }}</p> 
      <p>{{ form.password|add_class:"form-control"|attr:"placeholder:Créer votre mot de passe ici." }}</p> 
      <p>{{ form.confirm_password|add_class:"form-control"|attr:"placeholder:Retaper votre mot de passe." }}</p> 
      <input class="btn btn-lg btn-primary" type="submit" value="Continuer"> 
     </form> 
    </div> 
+0

이것은 도움이 될 수 있습니다. 위 코드를 업데이트했습니다. 코드가 항상 "1"인 이유를 말씀해 주시겠습니까? 다음을 살펴볼 수 있습니다. http://jaouani.dyndns.pro/start/inscription – GrandGTO