如何自定义Django用户创建表单中密码确认字段的验证错误提示
解决Django自定义用户表单中确认密码字段的错误提示定制问题
问题分析
你当前通过字典推导式统一生成所有字段的必填错误提示,但password2字段经field.replace('_', ' ').title()处理后,会生成不符合需求的提示文本,需要单独对该字段的错误信息进行覆盖。
解决方案
修改forms.py中的错误信息配置,单独为password2字段指定自定义的必填错误提示,以下提供两种可行方式:
方式一:在Meta类中直接覆盖
from django.contrib.auth.forms import UserCreationForm 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()}为必填项。" } for field in fields } # 单独覆盖password2的必填错误提示 error_messages['password2']['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[field_name])
方式二:在__init__方法中单独设置
from django.contrib.auth.forms import UserCreationForm 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()}为必填项。" } 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]) # 单独设置password2的必填错误提示 self.fields['password2'].error_messages['required'] = "确认密码为必填项。"
效果说明
修改完成后,当用户未填写确认密码字段时,表单会显示确认密码为必填项。的错误提示,符合定制需求。
内容的提问来源于stack exchange,提问作者abu abu
相关产品推荐
相关产品推荐

