使用 CSV 上传测试 Django 表单
Testing a Django Form with a CSV upload
我有一个表单,用户可以将 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.']}
您需要将文件传递到带有文件 kwarg 的表单中。
class TestImportCSVForm(测试用例):
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())
我有一个表单,用户可以将 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.']}
您需要将文件传递到带有文件 kwarg 的表单中。
class TestImportCSVForm(测试用例):
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())