我有一个表单,用户可以将CSV上传到其中以进行数据处理。我目前正在尝试测试form.is_valid()
方法。但是,我正在遵循Django文档,并且表单仍然返回错误,该字段需要一个值。有什么想法吗?
文档
documentation显示以下示例-
>>> c = Client()
>>> with open('wishlist.doc') as fp:
... c.post('/customers/wishes/', {'name': 'fred', 'attachment': fp})
测试
class TestImportCSVForm(TestCase):
def test_form_valid(self):
with open('fake.csv', 'r', newline='') as csvfile:
form_data = {
'csv_file': csvfile,
}
form = ImportCSVForm(data=form_data)
self.assertTrue(form.is_valid())
表格
class ImportCSVForm(forms.Form):
""" Form for uploading CSVs """
csv_file = forms.FileField(
label=_("CSV File"),
help_text=_("Upload a CSV"))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
'csv_file',
HTML("""<hr>"""),
ButtonHolder(
Submit('submit', 'Submit', css_class='btn btn-primary')
)
)
我运行测试时出错
(Pdb) form.errors
{'csv_file': ['This field is required.']}
答案 0 :(得分:1)
您需要将文件传递给带有kwarg文件的表单。
TestImportCSVForm(TestCase)类:
def test_form_valid(self):
with File(file=tempfile.NamedTemporaryFile()) as csvfile:
csvfile.write(b'test')
csvfile.flush()
form_data = {
'csv_file': csvfile,
}
form = ImportCSVForm(files=form_data)
self.assertTrue(form.is_valid())