2012-03-02 24 views
5

私はis_valid()テストに失敗したフォームを持っています。同じデータ入力でテストに合格する同じフォームを作成しました。なぜ誰かが合格しないと1つが失敗するかはわかりません。ここ無効な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>

は、換言すれば、あなたはそれが必要だったにもかかわらず、「行って」フィールドの値を指定しませんでした。 data辞書に 'done':1を追加すると、フォームが検証されます。

なぜ、1つのフォームが検証されたのか、もう1つではないのですか。これをすべて単一の小さなプログラムに貼り付けます。両方とも同じように動作することがわかります。何らかの理由で両方のケースで同じデータを実際に渡していないと推測できます。または、テストを実行したときにフォームに微妙な違いがあったこと。しかし、私は確信が持てません。

いずれにしても、エラーを印刷してみてください。洞察力が必要です。

+0

ありがとうございますjbrendel。恥ずかしい。それが問題でした。 – jabs

2

フォームエラーを確認できるはずです。このようなものは、あなたがエラーを見ることができるように機能するかもしれません。私はあなたのコードを実行し、私のために、両方のフォームが検証に失敗し

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

>>> f = ActivitySaveForm(data) 
>>> f.non_field_errors() 
>>> field_errors = [ (field.label, field.errors) for field in f] 
関連する問題