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