0

それで、私のforms.pyファイルの中に見ることができるように、私はユーザーにチェックボックスを提示します:

class AddFooToBarForm(forms.Form):
    to_original = forms.BooleanField(initial=True,
                                     error_messages={'required':
                                                         "Oh no! How do I fix?"})
    ...

ユーザーがそのチェックボックスをオンにするかオフにするかに応じて、views.pyファイル内に表示されているように、別のことを行います。

def add_foo_to_bar(request, id):
    ...
    try:
        bar = Bar.objects.get(pk=id)

        if request.method == 'POST': # handle submitted data
            form = AddFooToBarForm(bar, request.POST)
            if form.is_valid(): # good, now create Foo and add to bar
                ...
                to_original = form.cleaned_data['to_original']
                print 'to original is {0}'.format(to_original) # for debugging
                if to_original:
                    # do A
                else:
                    # do B

                ...

したがって、ユーザーがチェックボックスをオンにするかどうかに応じて、tests.pyファイル内でサイトが実際に正しいアクションを実行することをテストしたいと思います。

class FooTest(TestCase):
    ...

    def test_submit_add_to_Bar(self):
        form_data = {
            ...
            'to_original': True,
        }
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        self.assertContains(...) # works

        ...

        form_data['to_original'] = None
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        print response # for debugging purposes
        self.assertContains(...) # doesn't work

私はもう試した

  • del form_data['to_original']-これで「ああ、どうすれば修正できますか?」エラーメッセージ
  • form_data['to_original'] = None--ビュー関数で取得Trueするので、Bの代わりにAが実行されます
  • form_data['to_original'] = False-これで「ああ、どうすれば修正できますか?」もう一度エラーメッセージ

では、Djangoのチェックボックスをチェックせずにユーザーをテストするにはどうすればよいですか?(最新バージョンの1.4.3を使用しています)

4

1 に答える 1

1

チェックボックスがチェックされていない場合、送信されたフォームには表示されません。また、提出された値が'on'

フォームフィールドの定義時にBooleanFieldオプションのhaveを作成する場合。required=False

ドキュメントBooleanField

于 2012-12-26T05:33:39.330 に答える