我有一个Django表单类,它继承自内置的UserCreationForm
我正在使用AJAX提交表单,如果绑定表单未验证,则将其作为呈现的HTML返回(包括错误)
令我困惑的是,password2/确认字段中出现了与密码相关的错误(例如,太短、通用密码…)。以下是默认行为的屏幕截图:
从用户体验的角度来看,我觉得如果表单中的第一个密码字段出现错误会更有用,这样用户就可以调整该字段,然后在下面再次键入来确认它
我注意到在UserCreationForm中,clean_password2()实际上并没有验证密码,它只是检查password1和password2是否匹配。然后在_post_clean()方法中,验证password2,并将所有错误添加到该字段中
在试图更改它时,我覆盖了_post_clean(),如下所示:
def _post_clean(self):
super(forms.ModelForm, self)._post_clean()
password = self.cleaned_data.get('password1')
if password:
try:
password_validation.validate_password(password, self.instance)
except forms.ValidationError as error:
self.add_error('password1', error)
我不想调用super,让它验证并将错误发送到password2,所以我调用了祖父母(ModelForm)的post_clean方法(我想!),以避免遗漏任何错误。然后验证错误并将其发送到password1
这是UserCreationForm用于比较的post_clean()方法:
def _post_clean(self):
super()._post_clean()
# Validate the password after self.instance is updated with form data
# by super().
password = self.cleaned_data.get('password2')
if password:
try:
password_validation.validate_password(password, self.instance)
except ValidationError as error:
self.add_error('password2', error)
从表面上看,这似乎是我想要的方式,但当涉及到覆盖方法时,我不是很有信心——我担心会有奇怪的副作用
所以我的问题是,这样可以吗?你知道我想显示password1的错误是什么意思吗?任何建议都将不胜感激
*args, **kwargs
将具有更高的影响李>在大多数情况下,我们必须确保重写采用args和kwargs的方法时,最常见的错误是参数不匹配}是一个字典。这里,Read more about *args and **kwargs
*args
(参数,ex:def function(1,2,3)
)和**kwargs
(关键字参数,ex:def function(name='sam', age=25)
)是函数的动态参数。当您在没有*args
的情况下定义函数时,**kwargs
它有固定数量的输入,这意味着它不能接受比您在函数中定义的更多(或更少)的输入*args
是一个元组,{同样重要的是,做事的顺序可能会产生副作用或错误。无论如何,这取决于方法
这样想:
UserCreationForm
,Django默认注册表。这将影响使用注册的任何地方李>_post_clean(self)
属于{您的编辑将如何影响默认行为
A.您正在更改密码验证(仅更改fontend行为)。无论是password1还是password2,它都不会影响任何内容,因为两个密码都将匹配并发送到后端。因此,是的,在这种情况下完全可以。Self将引用
UserCreationForm
,因此不会影响其他ModelForm实例相关问题 更多 >
编程相关推荐