Как настроить сообщение об ошибке проверки формы для поля подтверждения пароля
Я пытаюсь настроить сообщение об ошибке валидации формы для поля подтверждения пароля в форме создания пользователя.
Мой forms.py выглядит следующим образом.
from django.contrib.auth.forms import UserCreationForm
from django.core.exceptions import ValidationError
from .models import User
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ('first_name','last_name','email','date_of_birth', 'gender', 'user_type', 'phone', 'address','photo', 'password1', 'password2' )
error_messages = {
field: {
'required': f"{field.replace('_', ' ').title()} is required."
}
for field in fields
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field_name in self.fields:
self.fields[field_name].error_messages.update(self.Meta.error_messages[field_name])
Мой views.py выглядит следующим образом.
class UserRegisterView( FormView ):
template_name = 'register.html'
form_class = CustomUserCreationForm
redirect_authenticated_user = True
success_url = reverse_lazy('dashboard')
def form_valid( self, form ):
user = form.save()
if user is not None:
login( self.request, user )
return super( UserRegisterView, self ).form_valid( form )
def get( self, *args, **kwargs ):
if self.request.user.is_authenticated:
return redirect('dashboard')
return super( UserRegisterView, self ).get( *args, **kwargs )
def form_invalid(self, form):
return super(UserRegisterView, self).form_invalid(form)
Мой HTML-код выглядит следующим образом.
<label class="form-label">PassWord Confirmation</label>
<input type="password" class="form-control" name="password2" />
{% if form.password2.errors %}
<div class="alert alert-danger">{{ form.password2.errors }}</div>
{% endif %}
Теперь я получаю сообщение о проверке Password2 is required.
. Но я хотел бы получить сообщение о проверке Password Confirmation is required.
.
Вы можете переопределить значения по умолчанию для каждого поля для всех возможных сообщений об ошибках валидации, которые поддерживает форма. В вашем случае это будет:
error_messages = {
'password2': {
'required': "Password Confirmation is required.",
},
}
Если вы хотите, чтобы это было динамично, вы можете создать отображение, где ключом будет ваше поле, а значением - другое отображение с определенными сообщениями об ошибках для каждого случая проверки.
field_message__map = {
'password2': {
'required': "Password Confirmation is required.",
},
'password1': {
'required': "Password is required.",
},
}
И затем вы должны использовать его в определении формы
error_messages = {
field: field_message__map[field] for field in fields
}
Я думаю, что в ваших представлениях и html нет ошибок. ИТАК,
полный forms.py
с пользовательским сообщением об ошибке:
from django.contrib.auth.forms import UserCreationForm
from django.core.exceptions import ValidationError
from .models import User
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = (
'first_name', 'last_name', 'email', 'date_of_birth',
'gender', 'user_type', 'phone', 'address', 'photo',
'password1', 'password2'
)
# Override the error message for password2
error_messages = {
field: {
'required': f"{field.replace('_', ' ').title()} is required."
}
for field in fields
}
error_messages['password2'] = {
'required': "Password Confirmation is required."
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field_name in self.fields:
self.fields[field_name].error_messages.update(self.Meta.error_messages.get(field_name, {}))
Явно задав требуемое сообщение об ошибке для поля password2
в словаре error_messages
, вы можете обеспечить отображение Password Confirmation is required.
, когда поле не заполнено.