用异常增强is_valid()
我有一个Django的字符字段,这个字段会通过is_valid()方法来检查。用户需要在这个字段里输入一个有效的逻辑表达式,所以我写了一个解析的方法,如果表达式不正确,就会抛出一个异常。
我想知道怎么改进is_valid()方法,让它能够处理这个异常,并向用户显示一个错误信息,告诉他们他们的查询是错误的。
我看过这篇文章(https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute),但是还是不知道该怎么做。
try:
job = Job(user=request.user) # set the current user
form = JobForm(request.POST, instance=job)
if form.is_valid():
form.save()
job.execute()
messages.success(request, u'A new job with the query "{query}" was created.'.format(query=job.query))
return HttpResponseRedirect(reverse('job-index'))
return self.render_to_response({'job_form': form, 'is_new': True})
except ParseError:
return self.render_to_response({'job_form': form, 'is_new': True})
我想在is_valid()方法里面使用try...except块,想问问有没有人能给点建议?
1 个回答
3
你自己已经给出了问题的答案——你可以创建自己的表单(或者模型表单),并且可以在这个表单的字段上进行自定义验证,使用它的 clean_'字段名'()
方法。举个例子,假设你的模型是:
class Job(models.Model):
expression_field = models.CharField(...)
...
你可以创建一个 forms.py
文件:
class JobForm(forms.ModelForm):
pass
class Meta:
model = Job
def clean_expression_field(self):
# You perform your custom validation on this field in here,
# raising any problems
value = self.cleaned_data['expression_field']
if value is 'really_bad':
raise forms.ValidationError("bad bad bad")
return value
然后像你在例子中那样在你的 views.py
中使用它。如果用户输入的值不符合你的标准,系统会自动抛出一个异常。