2017-08-23 54 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')