Изменение порядка полей UserCreationFrom из django.contrib.auth и allauth
Я пытаюсь изменить порядок полей в форме регистрации пользователя, используя django.contrib.auth. Однако, похоже, что некоторые поля (имя пользователя, электронная почта и пароль) я не могу переупорядочить, что, как я думаю, может быть связано с django allauth.
settings.py
ACCOUNT_SIGNUP_FORM_CLASS = 'users.forms.UserCreationForm'
forms.py
class UserCreationForm(UserCreationForm):
error_message = UserCreationForm.error_messages.update(
{
"duplicate_username": _(
"This username has already been taken."
)
}
)
first_name = forms.CharField(max_length=12, min_length=4, required=True,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'First Name'}))
last_name = forms.CharField(max_length=12, min_length=4, required=True,
widget=(forms.TextInput(attrs={'class': 'form-control'})))
email = forms.EmailField(max_length=50, help_text='Required. Inform a valid email address.',
widget=(forms.TextInput(attrs={'class': 'form-control'})))
password1 = forms.CharField(label=_('Password'),
widget=(forms.PasswordInput(attrs={'class': 'form-control'})),
help_text=password_validation.password_validators_help_text_html())
password2 = forms.CharField(label=_('Password Confirmation'), widget=forms.PasswordInput(attrs={'class': 'form-control'}),
help_text=_('Just Enter the same password, for confirmation'))
username = forms.CharField(
label=_('Username'),
max_length=150,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={'unique': _("A user with that username already exists.")},
widget=forms.TextInput(attrs={'class': 'form-control'})
)
class Meta(UserCreationForm.Meta):
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',)
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise ValidationError(
self.error_messages["duplicate_username"]
)
Я могу изменить порядок полей имени и фамилии, но они всегда располагаются ниже имени пользователя, электронной почты и пароля.
Вы можете указать порядок структурирования полей с помощью field_order
.
Подобно этому:
class UserCreationForm(UserCreationForm):
[.. fields ..]
class Meta(UserCreationForm.Meta):
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',)
field_order = ['username', 'email', 'password1', 'password2','first_name', 'last_name']