2017-08-23 10 views
0

私持ってACCOUNT_SIGNUP_FORM_CLASSは、私は、次の各フィールドのラベルを交換しようとしているジャンゴAllauth置き換えるラベル

class SignupForm(forms.Form): 

    def __init__(self, *args, **kwargs): 
     super(SignupForm, self).__init__(*args, **kwargs) 
     for field_name in self.fields.keys(): 
      print(field_name, self.fields[field_name].label) 

を指していることを、次の形式:usernameemailpassword1password2。フォームが開始されると、以下が出力されます。

username Username 
    email None 

しかし、私のブラウザでレンダリングされたフォームが

Username* 
E-mail* 
Password* 
Password (again)* 

はなぜのみusernameemailが印刷されていること、それをある彼らのラベルを持つすべてのフィールドを示し、そしてなぜemailフィールドのラベルでは、まだNoneですそれはレンダリングされたときにうまく表示されます。

4つのフィールドのラベルをどのように変更できますか?

+0

'print(dir(self.fields ['email']))'の出力は何ですか? –

答えて

2

これは、ACCOUNT_SIGNUP_FORM_CLASSに設定されているフォームでは実行できません。このフォームはallauthのSignupFormの基本クラスとして使用されます。そのため、フォームには存在しないため、フィールドを変更することはできません(サブクラスのみ)。

# On settings 
ACCOUNT_FORMS = {'signup': 'path.to.custom.singup.form'} 

カスタム登録フォームはこのように形成ジャンゴallauth singupから継承しなければなりません:あなたはジャンゴallauthからSignupFormをサブクラス化する必要があると、このように設定することができ、実際のサインアップフォームとしてその使用やりたいです:

from allauth.account.forms import SignupForm  


class CustomSignupForm(SignupForm): 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     # here you can change the fields 
     self.fields['email'] = forms.EmailField(label='custom label') 
関連する問題