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

고객님의 질문에 대한 답변은 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

관련 문제