2017-08-26 21 views
0

以下の例では、すべてのエラーメッセージをテンプレートに表示しようとしています。私はすべてのフォーラムで言及されたほとんどすべてを試しました。以下は私のコードです。私が行方不明です何を教えてくださいPOST後にレンダリングされないDjangoフォーム

フォーム

class RegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model = User 
     fields = (
      'username', 
      'first_name', 
      'last_name', 
      'email', 
      'password1', 
      'password2' 
     ) 

     def save(self, commit=True): 
      user = super(RegistrationForm, self).save(commit=False) 
      user.first_name = self.cleaned_data['first_name'] 
      user.last_name = self.cleaned_data['last_name'] 
      user.email = self.cleaned_data['email'] 

      if commit: 
       user.save() 

      return user 

ビュー

def register (request): 
    print(request.method) 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      print("Saved") 
      return render(request, 'main/product.html',{}) 
     else: 
      print("Some Error", form.errors) 
      args = {'form':form,'carousel':'display:none'}  
      print(args['form']) 
      return render(request, 'accounts/register.html',args) 
     # if a GET (or any other method) we'll create a blank form 
    else: 
     form = RegistrationForm() 

    args = {'form':form,'carousel':'display:none'} 
    return render(request, 'accounts/register.html',args) 

HTMLテンプレート

<form id="register" method="post" action="{% url 'register' %}"> 
    {% csrf_token %} 
    <div class="form-register-with-email"> 
    <div class="form-white-background"> 
    <div class="form-title-row"> 
     <h1>Create an account</h1> 
    </div> 
    {{ form.errors }} 
    {% for field in form %} 
    <div class="form-row"> 
     <label> 
     <span>{{field.label}}</span> 
     {{ field }} 
     </label> 
    </div> 
    {% endfor %} 

    <div class="form-row"> 
     <button type="submit">Register</button> 
    </div> 
    </div> 
    </div> 
</form> 

私がsubmitを押すと、ビューがトリガーされ、レンダリングステートメントの前にフォームを印刷すると、フォームにすべてのエラーメッセージが表示されます。しかし、レンダリングでは、送信後に画面上で実際に変更が発生することはありません。

以下は、印刷されたdjangoの出力です。

<ul class="errorlist"><li>username<ul class="errorlist"><li>A user with that username already exists.</li></ul></li><li>password2<ul class="errorlist"><li>The password is too similar to the username.</li><li>This password is too short. It must contain at least 8 characters.</li><li>This password is too common.</li></ul></li></ul> 
<tr><th><label for="id_username">Username:</label></th><td><ul class="errorlist"><li>A user with that username already exists.</li></ul><input autofocus="" id="id_username" maxlength="150" name="username" type="text" value="test" required /><br /><span class="helptext">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</span></td></tr> 
<tr><th><label for="id_first_name">First name:</label></th><td><input id="id_first_name" maxlength="30" name="first_name" type="text" value="test" /></td></tr> 
<tr><th><label for="id_last_name">Last name:</label></th><td><input id="id_last_name" maxlength="30" name="last_name" type="text" value="test" /></td></tr> 
<tr><th><label for="id_email">Email:</label></th><td><input id="id_email" name="email" type="email" value="[email protected]" required /></td></tr> 
<tr><th><label for="id_password1">Password:</label></th><td><input id="id_password1" name="password1" type="password" required /></td></tr> 
<tr><th><label for="id_password2">Password confirmation:</label></th><td><ul class="errorlist"><li>The password is too similar to the username.</li><li>This password is too short. It must contain at least 8 characters.</li><li>This password is too common.</li></ul><input id="id_password2" name="password2" type="password" required /><br /><span class="helptext">Enter the same password as before, for verification.</span></td></tr> 
[26/Aug/2017 10:01:19] "POST /register/ HTTP/1.1" 200 5732 

私は何が欠けていますか?

答えて

0

は、問題を解決しました。この

print(request.method) 
if request.method == 'POST': 
    form = RegistrationForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     print("Saved") 
     return render(request, 'main/product.html',{}) 
else: 
    form = RegistrationForm() 
    args = {'form':form,'carousel':'display:none'} 
    return render(request, 'accounts/register.html',args) 
+0

フォームが無効な場合、フォームは何も表示しません。ユーザーが間違ったデータを入力した場合、テンプレートにすべてのエラーが表示されるようにします。 – sdev

0

のようにそれを行います。それは問題を引き起こしていた私のjavascriptファイルの古いコードでした。これが修正されたら、フォームは正しく送信されました。

関連する問題