从 HTML 表单中获取 CSV 文件并在 django 中的 sqllite 中创建一个表
现在我尝试使用 pandas 并将文件转换为 json,然后用它创建一个表。
这是我的代码
HTML 文件
<body>
<form action="upload/" method="post" enctype="multipart/formdata">
{% csrf_token %}
<div class="block has-text-centered">
<h3
class="is-size-3 has-text-centered is-family-primary has-text-success-dark"
>
Upload a CSV File
</h3>
<div class="file is-medium has-name is-info is-centered" id="csv-file">
<label class="file-label">
<input class="file-input" type="file" name="csv" accept=".csv" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label">
Choose a file…
</span>
</span>
<span class="file-name">
No file uploaded
</span>
</label>
</div>
<br />
<input
class="button is-outlined is-rounded is-info"
type="submit"
value="Submit"
/>
<input
class="button is-outlined is-rounded is-info"
type="reset"
value="Reset"
id="csv-reset"
/>
</div>
</form>
</body>
</html>
VIEWS 文件
from django.shortcuts import render
def home(request):
return render(request, 'results/home.html', {})
CSV LOGIC (csvviews.py)
from django.shortcuts import render
import pandas as pd
from django.contrib import messages
def form_page(request):
if request.method == 'POST':
file = request.FILES.get(u'csv')
df = pd.read_csv(file)
df.to_json(turned_json)
my_obj = CsvModel.objects.create(csv_file=turned_json)
my_obj.save()
messages.success(request, 'CSV Uploaded!')
return render(request, 'results/home.html')
MODELS 文件
from django.db import models
class CsvModel(models.Model):
csv_file = models.FileField()
URLS 文件< /strong>
from django.urls import path
from . import views,csvviews
urlpatterns = [
path('', views.home, name="HOME"),
path('upload/', csvviews.form_page, name='UPLOAD'),
]
但使用此代码我收到以下错误
无效文件路径或缓冲区对象type:
我该如何解决这个问题? django 中是否有特定的 csv 包?有更简单的方法吗?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您正在将文件转换为 JSON 数据。您正在尝试将 JSON 数据添加到 FileField。
只需将您的
models.FileField()
转换为models.JSONField().
安装 jsonfield 以将 JSON 字段添加到您的模型中。
像这样更改您的 models.py:
注意:
如果您对此包有问题,只需将您的
models.FileField()
转换为models.TextField()
即可。因为JSON数据实际上是文本。You are converting your file to JSON data. And you are trying to add JSON data to a FileField.
Just convert your
models.FileField()
tomodels.JSONField()
.Install jsonfield to add a JSON field to your model.
Change your models.py like this:
Note:
If you have a problem with this package just convert your
models.FileField()
tomodels.TextField()
. Because JSON data is actually a text.