Получение CSV-файла из HTML-формы и создание таблицы в sqllite в django
Сейчас я попробовал использовать 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>
Просматривает файл
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')
Файл МОДЕЛИ
from django.db import models
class CsvModel(models.Model):
csv_file = models.FileField()
Но используя этот код, я получаю следующую ошибку
Неверный путь к файлу или тип объекта буфера: <class 'NoneType'>
Как мне решить эту проблему? Существуют ли специальные пакеты для csv в django? Есть ли более простой способ?
Спасибо
Вы конвертируете свой файл в данные JSON. И вы пытаетесь добавить данные JSON в поле FileField.
- Для Django 3
Просто конвертируйте свой models.FileField() в models.JSONField().
from django.db import models
class CsvModel(models.Model):
csv_file = models.JSONField()
- Для < Django 1.9
Установите jsonfield, чтобы добавить поле JSON в вашу модель.
pip install jsonfield
Измените ваш models.py следующим образом:
from django.db import models
import jsonfield
class CsvModel(models.Model):
csv_file = jsonfield.JSONField()
Примечание:
Если у вас возникли проблемы с этим пакетом, просто преобразуйте models.FileField() в models.TextField(). Потому что данные JSON на самом деле являются текстом.