2017-05-24 5 views
0

私はDjango 1.11を学習していて、ツールを使ってフォームを作成しています。if 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

申し訳ありませんが、私はジャンゴでのnoobと私は本当にform.errors ... – 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ローズマンは、彼の応答を示すように代わりにあなただけのテンプレートに(もしあれば)エラーを表示し、 code = "1" and code = "2"は使用しないでください。

+0

[OK]を更新しましたているのか分かりません私はこのコードの論理を理解しています。 しかし、私の変数コードは、エラーを報告するのではなく、フォームが送信されたかどうかを報告するために使用されます。 送信された場合はcode = 2、テンプレートは別のフォームを表示し、そうでない場合はcode = 1とMinimumRegisterFormが表示されます。 問題は、フォームを送信しても、コードは常に= 1です。なぜですか? – GrandGTO

+0

@GrandGTO私は、メッセージを送信するための回答とbtyを更新しました。['messages'](https://docs.djangoproject.com/ja/1.11/ref/contrib/messages/)フレームワークを使うべきです。 – doru

+0

メッセージは、ユーザーにメッセージを送信することです。私はちょうど "var" "code"を "1"の2に変えたいと思っています。 – 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

関連する問題