有一个代码:
class CinemaAddForm(forms.ModelForm):
class Meta:
model = Cinema
fields = ('title', 'adress')
widgets = {
'Название': forms.CharField(max_length=30),
'Адрес': forms.CharField(max_length=250)
}
def clean_title(self):
data = self.cleaned_data['title']
if data == '':
# self.add_error('title', "Вы забыли про название кинотеатра")
raise forms.ValidationError("Вы забыли про название кинотеатра")
return data
def clean_adress(self):
data = self.cleaned_data['adress']
if data == '':
#self.add_error('adress', "Вы забыли про адрес кинотеатра")
raise forms.ValidationError("Вы забыли про адрес кинотеатра")
return data
如果任何字段为空,我想在验证表单时引发文本错误,例如Вы забыли про название кинотеатра,现在我有View:
class AddCinemaApiView(View):
def post(self, request: WSGIRequest):
error = ''
title = request.POST.get('title')
adress = request.POST.get('adress')
form = CinemaAddForm(request.POST)
if form.is_valid():
return JsonResponse({'ok': True})
else:
print(form.errors)
return JsonResponse({'ok': False, 'error': form.errors})
我发送 json 作为响应(在单击按钮时调用此视图,并通过 JS 获取包含所有必要数据的请求)
尽管我没有在代码中的任何地方添加此文本,但我有一个问题:如何才能准确地获取传递给 ValidationError 的文本?


您可以覆盖所需字段的标准错误消息的文本
https://docs.djangoproject.com/en/dev/ref/forms/fields/#error-messages
clean我自己解决了这个问题:模型为表单提供了一些在调用所有字段和整个表单之前检查的规则。如果在这个阶段发生了错误,那么事情将无法达到表单定义的验证。为避免这种情况,您需要在模型中指定
blank=false必填字段。正是这个参数负责在表单字段中留下空文本的能力(不要与 混淆blank=false)null=false:但是,如果您不想更改模型(例如,如果用户的表单应该以自己的方式工作,而管理面板中的表单 - 以自己的方式工作)您可以像我一样做:添加表单的构造函数,并分别为每个字段(或像我一样,为所有字段)设置
fields['название поля'].required = False那么表单将不会遵循模型中定义的规则,您可以完全自己进行验证。这是完整的表单代码: