Джанго Аллах заменяет этикетки

У меня есть следующая форма, которая 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)

Я пытаюсь заменить метки для каждого из следующих полей: username, email, password1 а также password2, Когда форма инициируется, печатается следующее.

   username Username
   email None

Но отображаемая форма в моих браузерах показывает все поля с их метками

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

Почему это только username а также email печатаются, и почему email метка поля None все же это показывает очень хорошо, когда это предоставлено.

Как я могу изменить метки всех четырех полей?

1 ответ

Решение

Вы не можете это сделать в форме, установленной на ACCOUNT_SIGNUP_FORM_CLASS, Эта форма используется в качестве базового класса для RegistrationForm от allauth. Таким образом, вы не можете изменить любое поле, потому что оно не существует в этой форме (только в подклассе). Чтобы сделать то, что вы хотите, вы должны создать подкласс RegistrationForm из django allauth и использовать его в качестве реальной формы регистрации, которую можно установить так:

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

Пользовательская форма регистрации должна наследоваться от формы входа django allauth следующим образом:

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')
Другие вопросы по тегам