不使用打印的测试用例的 AttributeError

AttributeError on a test case without using print

我是 Python/Django 的新手,而且我是自学的,所以也许我在这里遗漏了一些基本知识...

我正在尝试在 Django 中为模型表单编写一个测试用例。 我创建了一个表单实例,我可以打印它以查看 Django 如何呈现表单。

使用 form.cleaned_data 也有效,返回表单的值。

    bulk_image_form = BulkTestForm(data={'daisy': 3, 'dandelion': 0, 'tulips': 0, 'sunflowers': 1, 'roses': 0})
    test_form = bulk_image_form
    print(test_form)
    print(test_form.cleaned_data)

但是,一旦我删除第一个打印语句 (print(test_form)),test_form.cleaned_data 就不再有效。控制台读取以下内容:

AttributeError: 'BulkTestForm' 对象没有属性 'cleaned_data'

为什么打印语句会对访问对象的属性产生影响?

您必须调用 is_valid() 才能访问 cleaned_data

test_form = bulk_image_form
test_form.is_valid()
print(test_form.cleaned_data)

当您打印表单时,该表单被验证为副作用,因此您可以访问 cleaned_data,即使您没有明确调用 is_valid()