Django Allauth 替换标签

Django Allauth replace labels

我有下面的表格,ACCOUNT_SIGNUP_FORM_CLASS 指向

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 但它在渲染时显示得很好.

我怎样才能更改所有四个字段的标签?

您不能在 ACCOUNT_SIGNUP_FORM_CLASS 上设置的表单上执行此操作。该表单用作 allauth 的 SignupForm 的基础 class。因此您不能更改任何字段,因为它不存在于该表单中(仅存在于 subclass 中)。要做你想做的事,你必须从 django allauth 子class 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')