2012-03-02 47 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

我跑你的代碼上。對我來說,這兩種形式無法驗證。您可以這樣做:print f.errors,您將獲得驗證期間創建的錯誤消息的HTML。

爲此,我得到:

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

所以,換句話說,你沒有爲「完成」字段中指定的值,即使它是必需的。一旦您將'done':1添加到data字典中,表單將進行驗證。

至於爲什麼一個表單被驗證,另一個不是......我將所有這些粘貼到一個單獨的小程序中,您可能會發現它們的行爲方式都是相同的。我只能推測,出於某種原因,在兩種情況下你都沒有真正傳遞相同的數據。或者當你進行測試的時候,表單中有一個細微的差別。但我無法確定。

無論如何,嘗試打印錯誤,你應該得到一個洞察力。

+0

謝謝jbrendel。尷尬。這是問題。 – jabs 2012-03-02 23:01:30