2017-11-13 40 views
0

私はプロジェクトのためにDjangoの登録の2.3を使用して、以下を標準RegistrationFormを上書きしようとしている:ジャンゴ・登録オーバーライド登録フォーム

class MyRegistrationForm(RegistrationForm): 
    captcha = NoReCaptchaField() 

    class Meta: 
     model = User 
     fields = ['first_name', 'last_name', 'username', 'email', 'password1', 'password2'] 
     widgets = { 
      'first_name' : forms.TextInput(attrs={'class' : 'form-control'}), 
      'last_name' : forms.TextInput(attrs={'class' : 'form-control'}), 
      'username' : forms.HiddenInput(), 
      'email' : forms.EmailInput(attrs={'class' : 'form-control'}), 
      'password1' : forms.PasswordInput(attrs={'class' : 'form-control'}), 
      'password2' : forms.PasswordInput(attrs={'class' : 'form-control'}), 
     } 

私は、その後で私urls.pyからこれを呼んでいますcaptchafirst_namelast_nameフィールドがフォームコントロールを使用してレンダリングされたテンプレートに

url(r'^accounts/register/$', RegistrationView.as_view(form_class=MyRegistrationForm), name='registration_register'),usernameが隠されているが、他のフィールドは、クラスなしでレンダリングされます。私は何をする必要がありますか?

+0

を使用。ドキュメントの[note](https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-the-default-fields)を参照してください。あなたの場合、 'email'は' RegistrationForm'によって宣言され、 'password1'と' password2'は 'UserCreationForm'(' RegistrationForm'サブクラス)によって宣言されます。したがって、これらの3つのフィールドは 'widgets'で上書きすることはできません。 – Alasdair

答えて

0

私はかつて同じ問題を抱えていたし、私はあなたがフォームによって明示的に宣言されたフィールドを上書きするために、 `widgets`を使用することはできません。この


class MyRegistrationForm(RegistrationForm): 
    captcha = NoReCaptchaField() 
    first_name = forms.CharField(max_length=30, required=False, widget=forms.TextInput(attrs={'class': 'form-control'})) 
    last_name = forms.CharField(max_length=30, required=False, widget=forms.TextInput(attrs={'class': 'form-control'})) 
    email = forms.EmailField(max_length=254, widget=forms.TextInput(attrs={'class': 'form-control'})) 
    password1 = forms.CharField(max_length=30, required=True, widget=forms.TextInput(attrs={'class': 'form-control', 
                          'name': "password1", 
                          'type': "password"})) 
    password2 = forms.CharField(max_length=30, required=True, widget=forms.TextInput(attrs={'class': 'form-control', 
                          'name': "password2", 
                          'type': "password"})) 
    class Meta: 
     model = User 
     fields = ['username', 'first_name', 'last_name', 'email'] 
     widgets = { 
      'username' : forms.TextInput(attrs = {'class': 'form-control'}), 
     } 
+0

それは動作しますが、なぜ私がしなかったのかわかりません。 – HenryM

+0

いくつかのフィールドは変更できません。彼らはdefualt attrを持っています –