2017-08-14 28 views
2

私はDjangoを初めて使用しています。サインアップフォームを送信するたびに、ビュー機能のform.is_valid()がfalseを返します。私はどこに間違っているのか分かりません。追加のフィールドにはSignUpFormクラスを使用します。 signup.htmlは私のテンプレートです。サインアップは私のビュー機能です。私のform.pyのSignUpFormクラスが間違っていますか?どんな助けも素晴らしいだろう。私もサインアップフォームにすべての詳細を記入しましたが、form.is_valid()は私の場合はfalseを返します。Django is_valid()はfalseを返します

私のビュー機能

def signup(request): 
    if request.method == 'POST': 
     form = SignUpForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return render(request, 'signup.html', {'message': 'Signed Up successfully'}) 
    return render(request, 'signup.html') 

私forms.py

from django import forms 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User 


class SignUpForm(UserCreationForm): 
    first_name = forms.CharField(max_length=255) 
    last_name = forms.CharField(max_length=255) 
    password = forms.CharField(widget=forms.PasswordInput) 
    confirm_password = forms.CharField(widget=forms.PasswordInput) 
    phone_number = forms.CharField(max_length=100) 

    class Meta: 
     model = User 
     fields = ['username', 'email', 'first_name', 'last_name', 'password', 'confirm_password', 'phone_number'] 

私base.html

<body style = "margin: 0;"> 
    <div class="row" style="padding-left: 2%;padding-top:1%;"> 
     <div class="col-md-9"> 
      <h2>Welcome to my site</h2> 
     </div> 
     <div class="col-md-2"> 
      <a href="{% url 'login' %}" class="btn btn-primary" style="margin-right: 6%;">Login</a><br><br><br> 
     </div> 
    </div> 


    <div class="row" style="margin-left: 4%"> 
     <form class="form-group" name="form1" id="form1" method="post" style="padding-top: 1%" action = "{% url 'signup' %}"> 
      {% csrf_token %} 
      <h3>Sign up</h3><br> 
      <div class="form-group row"> 
       <label id="user" class="col-4 col-form-label">Username</label> 
       <div class="col-8"> 
        <input class="form-control" type="text" name = "username" placeholder = "Username" required="true" > 
       </div> 
      </div> 
      <div class="form-group row"> 
       <label id="email" class="col-4 col-form-label">Email id</label> 
       <div class="col-8"> 
        <input class="form-control" type="text" name = "email" placeholder = "Email id" required="true" > 
       </div> 
      </div> 
      <div class="form-group row"> 
       <label id="first_name" class="col-4 col-form-label">First name</label> 
       <div class="col-8"> 
        <input class="form-control" type="text" name = "first_name" placeholder = "First name" required="true" > 
       </div> 
      </div> 
      <div class="form-group row"> 
       <label id="last_name" class="col-4 col-form-label">Last name</label> 
       <div class="col-8"> 
        <input class="form-control" type="text" name = "last_name" placeholder = "Last name" required="true" > 
       </div> 
      </div> 
      <div class="form-group row"> 
       <label id="password" class="col-4 col-form-label">Password</label> 
       <div class="col-8"> 
        <input class="form-control" type="password" name = "password" placeholder = "Password" required="true" > 
       </div> 
      </div> 
      <div class="form-group row"> 
       <label id="confirm_password" class="col-4 col-form-label">Re-enter Password</label> 
       <div class="col-8"> 
        <input class="form-control" type="password" name = "confirm_password" placeholder = "Password" required="true" > 
       </div> 
      </div> 
      <div class="form-group row"> 
       <label id="contact_number" class="col-4 col-form-label">Contact number</label> 
       <div class="col-8"> 
        <input class="form-control" type="text" name = "phone_number" placeholder = "Contact number" required="true" > 
       </div> 
      </div> 

      <input type = "submit" value = "Sign up" class="btn btn-primary"> 
     </form> 
     {% if message %} 
      {{ message }} 
     {% endif %} 
    </div> 
    <br> 
</body> 

base.html

を拡張して、私のsignup.html
{% extends 'base.html' %} 

{% block content %} 
    <h2>Sign up</h2> 
    <form method="post" action="{% url 'signup' %}"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Sign up</button> 
    </form> 
{% endblock %} 
+2

form.is_valid()を実行した後、form.errors属性でエラーを検索できます。 –

答えて

3

username,password1およびpassword2の3つのフィールドがあります。パスワードフィールドをpasswordconfirm_passwordに変更したため、フォームが機能しません。

form.is_valid()をチェックした後でform.errorsをチェックすると、テンプレートに欠けているので、password1password2のエラーがあることがわかります。

2

HTMLフォームをレンダリングしてフォームに渡そうとしています。 djangoテンプレートを使用してフォームをレンダリングする必要があります。これは、あなたはまた、属性名を使用して個々のフィールドをレンダリングすることができます<p>タグ

に包まれたフォーム全体をレンダリングします

{{ form.as_p }} 

下回るような何か。以下は、 <div>タグでラップすることができるhtml入力フィールドをレンダリングします。

{{form.email}} 
{{form.first_name}} 

などとなる。

また、あなたは、テンプレート内の実際のフォームを使用して、手動でそれを書くべきではありませんworking with forms

2

で見たいと思うかもしれません。例:

views.py

def signup(request): 
    if request.method == 'POST': 
     form = SignUpForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return render(request, 'signup.html', {'message': 'Signed Up successfully'}) 

    else: 
     form = SignUpForm() 
    return render(request, 'signup.html', {form: form}) 

template.html

<form action="{% url 'signup' %}" method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

私はその作業ならば、チェックアウト、最初にこれをしようと提案し、その後、スタイリング、および書式を心配でしょう。お役に立てれば!

+0

@Alasdair良いキャッチ、私は私の答えを更新します。ありがとう! –

関連する問題