2017-08-23 89 views
0

我有以下形式ACCOUNT_SIGNUP_FORM_CLASS指向Django的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還它在渲染時顯示得很好。

我將如何更改所有四個字段的標籤?

+0

'print(dir(self.fields ['email']))''的輸出是什麼? –

回答

2

你不能這樣做在ACCOUNT_SIGNUP_FORM_CLASS設置的窗體上。該表單被用作來自allauth的SignupForm的基類。所以你不能更改任何字段,因爲它不存在於該表單上(僅在子類上)。做你想做什麼,你必須從Django中allauth子類SignupForm並用其作爲可設定這樣的真正的註冊表單:

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

自定義註冊表格必須從Django的allauth singup繼承形成這樣的:

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')