2016-12-09 12 views
0

私はホームページ上で登録を可能にしようとしています(登録ボックスはクリックして表示されます)ので、登録を処理するURLはありません。私はget_context_dataを通してフォームを送信しようとしていますが、動作しません。form.is_validが検証されていません

<form action="" enctype="multipart/form-data" method="post">{% csrf_token %} 
    <div class="registerBox"> 
     {{ form.username }} 
     {{ form.password }} 
     <input type="submit" value="register"/> 
    </div> 
</form> 

のフィールドが表示さ

base.html

class UserRegistrationForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput) 
    confirm_password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = User 

     fields = [ 
      'username', 
      'password', 
      'confirm_password', 
     ] 

views.py

class BoxesView(ListView): 
    template_name = 'polls.html' 

    def get_context_data(self): 
     context = super(BoxesView, self).get_context_data() 

    # login 
    form = UserRegistrationForm(self.request.POST or None) 
    context['form'] = form 
    if form.is_valid(): 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     user = User.objects.create_user(username, password) 
     user.save() 
     return redirect('/') 

    return context 

     return context 

    def get_queryset(self): 
     pass 

forms.py:ここに私のコードですフォームを送信した後は、form.is_validがFalseなのでUserは作成されません。何か案が?

答えて

0

フォームにはconfirm_passwordが送信されているようですが、それはあなたのhtmlフォームの一部ではありません。

+0

ちょうどまだ 'form.is_valid場合()'ブロックの後に '' form.errors'とform.non_field_errors'を印刷してみ – Zorgan

+0

機能していない、ということ削除:代わりに、このようなpost()方法でそれを行いますどのようなエラーが表示されるかを確認してください。 –

1

get_context_data()から返信しないでください。 、

class BoxesView(ListView): 
    template_name = 'polls.html' 

    def post(self, request, *args, **kwargs): 
     form = UserRegistrationForm(request.POST) 

     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 
      user = User.objects.create_user(username, password=password) 
      return redirect('/') 
     else: 
      return self.get(request, *args, **kwargs) 

    def get_context_data(self): 
     context = super(BoxesView, self).get_context_data() 
     context['form'] = UserRegistrationForm() 
     return context 
+0

これに変更されましたが、まだMethod Not Allowed(POST)が表示されています。/ home/ "POST/home/HTTP/1.1" 405エラー。何か案が? – Zorgan

+0

私は実際にそのやり方を変えました。私は 'get_context_data'からの返答が正しいとは思わない。代わりに 'post'から行うべきです。 – grantmcconnaughey

+0

'ListView'に' post'メソッドがないので、メソッドにエラーが発生していません。したがって、例のように1つを追加する必要があります。 ListViewの利用可能なメソッド/属性については、[Classy CBV](http://ccbv.co.uk/projects/Django/1.10/django.views.generic.list/ListView/)を参照してください。 – grantmcconnaughey

関連する問題