2012-02-15 47 views
1

我有一个通过is_valid()方法检查的django charField。用户应该在该字段中输入有效的逻辑表达式,所以我写了一个解析方法,如果表达式不正确,则会引发异常。Enhance 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()方法中完成,这是我的本意。有人得到任何提示?

回答

3

您已经使用其clean_'fieldname'()方法自己提供了该问题的答案 - 您create your own form (or model form)perform custom validation。因此,例如,说你的模式是:

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因为你已经在你的榜样。现在如果用户输入的值不符合您的标准,将会自动产生一个例外

+0

我写了一个非常类似的答案,当你进来的时候。说得好! – aganders3 2012-02-15 17:39:04