python-3.x - 将 CSV 导入 Django,保存数据并在模板中显示结果
问题描述
我需要您帮助将数据(CSV)上传到 django 应用程序并将数据保存到数据库。我还想在模板中显示逐行结果。附上页面图片供您参考。请指导我如何实现相同的。图片
解决方案
我曾在一些类似的项目中工作过,接收 csv 并将数据上传到不同的数据库中。我使用 pandas 来处理不同类型的用户友好的表格扩展,但如果你只使用 csv,你可以使用 python 中的 csv 库。您可以简单地放置一些表格来上传 csv 以允许用户将文件发送到 django 应用程序。
在这些示例中,我们使用它来捕获 xlsx 文件,然后在数据帧中进行转换(使用 pandas)以便于处理。
archiveXLSX = request.FILES['xlsx_file']
df = pd.read_excel(archiveXLSX,keep_default_na=False)
现在您在 django 后端拥有数据,需要转换这些数据并确定这些数据可以加载到数据库中。
经过所有验证,我们将数据放入列表中(不保存)。
list_example = [
ExampleModel(data1,data2,data3),
ExampleModel(data1,data2,data3),
]
要上传到数据库,有趣的是使用 bulk_create 插入数据(以避免执行多次插入)bulk_create 可以比逐个创建一个更快。
前任:
ExampleModel.objects.using('database').bulk_create(list_example)
因此,如果您想在模板中显示这些数据,我建议您在数据库中创建一些表格,该表格将指示上传日期、用户上传的文件以及从这些文件上传的数据的 ID。前任:
id, file_name , date , id_data
1 ,example.csv,20 - 04 - 2020, 2
2 ,example.csv,20 - 04 - 2020, 4
3 ,example.csv,20 - 04 - 2020, 2
现在。要处理这两个模型,您需要创建 csv 模型对象,同时为来自 csv 的数据创建模型对象(确保您将首先保存来自 csv 的数据的模型,在这种情况下是 ExampleModel)。
让我们假设谁在验证这些数据后,处理这些常见的事情。你把它们放在某个字典里,保存它们的功能可以是这样的:
csvDataToCreate = []
dataToCreate = []
for data in dataDict:
example = ExampleModel(data['data1'],data['data2'],data['data3'])
dataToCreate.append(example)
csvData = ExampleCsvModel(filename, datetime.now().date(), example)
csvDataToCreate.append(csvData)
现在您拥有所需的所有信息。csvData 的视图可以是一个简单的选择。
csvData.objects.filter(file_name='file.csv',date='xx-xx-xxxx')
模板也很简单:
<table class="table table-striped">
<thead>
<tr>
<th scope="col" style="width: 35%;">data1</th>
<th scope="col" style="width: 45%;">data2</th>
<th scope="col" style="width: 5%;">data3</th>
</tr>
</thead>
<tbody>
{% for csv in csvitens %}
<tr>
<td style="width: 35%;"><div class='btn'>{{csv.id_data.data1}}</div></td>
<td style="width: 35%;"><div class='btn'>{{csv.id_data.data2}}</div></td>
<td style="width: 35%;"><div class='btn'>{{csv.id_data.data3}}</div></td>
<tr>
{% endfor %}
</tbody>
</table>
对于这个任务,您可以使用您选择的 css 框架,这里是 boostrap4。