2012-03-02 4 views
5

is_valid() 테스트에 실패한 양식이 있습니다. 동일한 데이터 입력으로 테스트를 통과하는 동일한 양식을 만들었습니다. 왜 사람이 지나가고 하나는 실패 할 지 확신 할 수 없습니다. 여기서 테스트 모두에 대한 결과는부적절한 Django 양식

choices = ((1,'Yes'),(0,'No'), 
    ) 

class ActivitySaveForm(forms.Form): 
    name = forms.CharField(
     label=u'Activity Name', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    url = forms.URLField(
     label=u'URL', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    desc = forms.CharField(
     label=u'Describe it', 
       widget=forms.TextInput(attrs={'size': 250}) 
    ) 
    created = forms.DateField(
     label=u'Date Entered',initial=datetime.date.today, 
    ) 
    priority = forms.CharField(
     label=u'priority: 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    difficulty = forms.CharField(
     label=u'How hard is it? 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    done = forms.TypedChoiceField(choices=choices, widget=forms.RadioSelect, coerce=int 
    ) 
    tags = forms.CharField(
     label=u'Tags',required=False, 
      widget=forms.TextInput(attrs={'size': 64}) 
    ) 
#def __init__(self, *args, **kwargs): 
    #super(CircuitForm, self).__init__(*args, **kwargs) 

    #for key in self.fields: 
     #self.fields[key].required = False 


class AcTest(forms.Form): 
    name = forms.CharField(
     label=u'Activity Name', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    url = forms.URLField(
     label=u'URL', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    desc = forms.CharField(
     label=u'Describe it', 
       widget=forms.TextInput(attrs={'size': 250}) 
    ) 
    created = forms.DateField(
     label=u'Date Entered',initial=datetime.date.today, 
    ) 
    priority = forms.CharField(
     label=u'priority: 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    difficulty = forms.CharField(
     label=u'How hard is it? 1-5', 
      widget=forms.TextInput(attrs={'size': 1}) 
    ) 
    done = forms.TypedChoiceField(choices=choices, widget=forms.RadioSelect, coerce=int 
    ) 
    tags = forms.CharField(
     label=u'Tags',required=False, 
      widget=forms.TextInput(attrs={'size': 64}) 
    ) 

:

여기에 형성된다.

>>> data = {'name':'test', 
...   'url': 'www.test.com', 
...   'desc':'test desc', 
...   'created': '01/01/1900', 
...   'priority':1, 
...   'difficulty':1, 
...   'desc':'test desc', 
...   'tags':'test desc'} 
>>> f=ActivitySaveForm(data) 
>>> f.is_valid() 
False 
>>> f=AcTest(data) 
>>> f.is_valid() 
True 

이 오류를 진단하는 방법을 잘 모르고 작동시키지 못했습니다. 도움을 주셔서 감사합니다.

답변

8

https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

나는 두 형태의 유효성을 검사하는 데 실패에 나를 위해 코드를 실행 (죄송이 안된이다). 당신은 단지 이것을 할 수 있습니다 : print f.errors 그리고 유효성 검사 도중 생성 된 오류 메시지에 대한 HTML을 얻을 것이다. 이를 위해

내가 얻을 :

<ul class="errorlist"><li>done<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

그래서 다른 말로하면, 당신은이 요구에도 불구하고 '완료'필드의 값을 지정하지 않았습니다. data 사전에 'done':1을 추가하면 양식이 유효성을 검사합니다.

왜 하나의 양식이 유효한지 아닌지 ...이 모든 것을 하나의 작은 프로그램에 붙여 넣으면 둘 다 같은 방식으로 작동합니다. 나는 어떤 이유로 든 두 경우 모두 같은 데이터를 전달하지 못했다고 추측 할 수 있습니다. 또는 테스트를 실행했을 때 폼에 미묘한 차이가 있음을 의미합니다. 그러나 나는 확신 할 수 없다.

어쨌든 오류를 인쇄 해보고 통찰력을 얻어야합니다.

+0

감사합니다. jbrendel. 어리둥절한. 그것이 문제였습니다. – jabs

2

양식 오류를 점검 할 수 있어야합니다. 이것과 같은 것은 오류를 볼 수 있도록 작동합니다.

>>> f = ActivitySaveForm(data) 
>>> f.non_field_errors() 
>>> field_errors = [ (field.label, field.errors) for field in f]