表单上的 Django 错误而不是引发 ValidationError
Django Error on Form instead of raising a ValidationError
我想知道如何在表单上显示错误而不是引发验证错误页面。我的意思是当在表单本身上生成错误列表时,我将附上不同表单的屏幕截图,因为我的解释不是最好的哈哈。
现在在我看来,我提出了一个 ValidationError 而不是仅添加错误本身的表单。我怎样才能添加表单错误而不是引发实际的验证错误?我希望 errorlist 的正常行为出现在我的表单上。非常感谢任何帮助!
我的看法如下:
class EditProfileInformationView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
form = UserEditForm(initial={
'first_name': self.request.user.first_name,
'last_name': self.request.user.last_name,
'email': self.request.user.email
})
context = {
'form':form
}
return render(request, 'accounts/update.html', context)
def post(self, request, *args, **kwargs):
form = UserEditForm(instance=request.user, data=request.POST)
context = {
'form': form
}
if form.is_valid():
initial_email = self.request.user.email
form.save(commit=False)
email = form.cleaned_data['email']
if User.objects.filter(email=email).exists() and email != initial_email:
raise ValidationError('This email already exists')
else:
form.save()
messages.success(request,'Profile Successfully Updated')
return redirect('/')
else:
return render(request, 'accounts/update.html', context)
如果您在 get
/post
视图函数中引发错误,那么这意味着服务器将 return 服务器错误:如果出现错误,您的视图仍应 return 一个 HTTP 响应,可能状态代码在 400-499 范围内(客户端错误),但不会引发异常。
在您的 UserEditForm
中,您应该通过以下方式实现此唯一性过滤器:
class UserEditForm(forms.ModelForm):
# …
def clean_email(self):
email = self.cleaned_data['email']
qs = User.objects.exclude(<strong>pk=self.object.pk</strong>).filter(<strong>email=email</strong>)
if qs.exists():
raise ValidationError('This email already exists')
return email
通常情况下,视图不应执行(广泛的)验证,由表单来确保数据有效且经过清理。
我想知道如何在表单上显示错误而不是引发验证错误页面。我的意思是当在表单本身上生成错误列表时,我将附上不同表单的屏幕截图,因为我的解释不是最好的哈哈。
现在在我看来,我提出了一个 ValidationError 而不是仅添加错误本身的表单。我怎样才能添加表单错误而不是引发实际的验证错误?我希望 errorlist 的正常行为出现在我的表单上。非常感谢任何帮助!
我的看法如下:
class EditProfileInformationView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
form = UserEditForm(initial={
'first_name': self.request.user.first_name,
'last_name': self.request.user.last_name,
'email': self.request.user.email
})
context = {
'form':form
}
return render(request, 'accounts/update.html', context)
def post(self, request, *args, **kwargs):
form = UserEditForm(instance=request.user, data=request.POST)
context = {
'form': form
}
if form.is_valid():
initial_email = self.request.user.email
form.save(commit=False)
email = form.cleaned_data['email']
if User.objects.filter(email=email).exists() and email != initial_email:
raise ValidationError('This email already exists')
else:
form.save()
messages.success(request,'Profile Successfully Updated')
return redirect('/')
else:
return render(request, 'accounts/update.html', context)
如果您在 get
/post
视图函数中引发错误,那么这意味着服务器将 return 服务器错误:如果出现错误,您的视图仍应 return 一个 HTTP 响应,可能状态代码在 400-499 范围内(客户端错误),但不会引发异常。
在您的 UserEditForm
中,您应该通过以下方式实现此唯一性过滤器:
class UserEditForm(forms.ModelForm):
# …
def clean_email(self):
email = self.cleaned_data['email']
qs = User.objects.exclude(<strong>pk=self.object.pk</strong>).filter(<strong>email=email</strong>)
if qs.exists():
raise ValidationError('This email already exists')
return email
通常情况下,视图不应执行(广泛的)验证,由表单来确保数据有效且经过清理。