2012-02-15 20 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