django - 如果 form.is_valid() 不调用 clean(self) 方法
问题描述
我有一个绑定到 CustomUser(扩展 AbstractUser)的 RegisterUserForm。在我保存用户之前,我想检查 password1 和 password2 是否相等,但不调用 clean(self) 方法。即使密码不同,也会创建用户。我已经阅读了很多问题并尝试了很多东西,但找不到答案。我的代码如下
我尝试添加一个 init 和一个 save 方法,但仍然不起作用。
class RegisterUserForm(forms.ModelForm):
password1=forms.CharField(label=_("password"), min_length=4)
password2=forms.CharField(label=_("repeat password"), min_length=4)
class Meta:
model = CustomUser
fields = ('first_name', 'last_name', 'email', 'password1','password2')
def save(self, *args, **kwargs):
self.full_clean()
return super().save(*args, **kwargs)
def clean(self):
cleaned_data = super().clean()
print("clean is called")
password1 = form.cleaned_data.get("password1")
password2 = form.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise ValidationError('password_mismatch')
return self.cleaned_data
我的观点是
def register(request):
if request.method=='POST':
form = RegisterUserForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data['password1'])
user.save()
email = user.email
messages.success(request, f'user with {email} created successfully')
return redirect('home')
else:
form = RegisterUserForm()
return render(request, 'users/register.html', {'form':form })
解决方案
推荐阅读
- python - 在 PYCHARM 中导入工作正常,但在从 CLI 运行模块时给我一个错误
- amazon-web-services - 在 AWS EC2 中升级实例类型后数据丢失
- java - org.osgi.framework.BundleException:无法解决:缺少要求:osgi.wiring.package;(osgi.wiring.package=org.json)
- php - 合并两个数组并创建新的
- javascript - 第一个 AJAX 总是在最后一个嵌套 AJAX 完成之前发生
- redux - 如何在ngrx中以简单的方式规范化来自服务器的数据
- java - Android 通过广播接收器和服务获取位置
- python - 从 Python 包中调用 Python OR-tools 函数时不起作用
- vue.js - VueJS/VueX:当 state 属性是一个数组时,从不调用 Watch
- java - RecyclerView onCreateViewHolder 位置背景颜色