2012-02-15 19 views
1

is_valid()メソッドでチェックされるdjango charFieldがあります。ユーザーはこのフィールドに有効な論理式を入力することになっているので、式が正しくない場合に例外を発生させる構文解析メソッドを書きました。例外を含む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}) 

try ... except-blockはis_valid()メソッド内で実行する必要があります。これは私の意図です。誰かが何かヒントを得た?

答えて

3

あなた自身が質問create your own form (or model form)perform custom validationのフォームのフィールドにclean_'fieldname'()メソッドを使用して回答を提供しました。だから、例えば、あなたのモデルがあると言う:

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

関連する問題