我在我的站点上接收来自upload form
的数据,我想将这些数据插入到Database
中。在views.py
中,我使用以下代码
def upload(request):
data = {}
if "GET" == request.method:
return render(request, "main/upload.html", data)
# if not GET, then proceed
csv_file = request.FILES["csv_file"]
if not csv_file.name.endswith('.csv'):
messages.error(request,'File is not CSV type')
return HttpResponseRedirect(reverse("main:upload"))
#if file is too large, return
if csv_file.multiple_chunks():
messages.error(request,"Uploaded file is too big (%.2f MB)." % (csv_file.size/(1000*1000),))
return HttpResponseRedirect(reverse("main:upload"))
file_data = csv_file.read().decode("utf-8")
lines = file_data.split("\n")
#io_string = io.StringIO(data_set)
#print(io_string.getvalue())
#next(io_string)
for line in lines:
column = line.split(",")
data_dict = {}
data_dict["顧客CD"]=column[0],
data_dict["顧客補助CD"]=column[1],
data_dict["顧客名称1"]=column[2],
data_dict["顧客名称"]=column[3],
data_dict["顧客名称カナ"]=column[4],
data_dict["法人名称"]=column[5],
data_dict["代表者名称"]=column[6],
data_dict["住所"]=column[7],
data_dict["電話番号"]=column[8],
data_dict["地区名称"]=column[9],
data_dict["データマッチ用電話番号"]=column[10],
data_dict["契約状態"]=column[11]
form = kokyaku(data_dict)
form.save()
return HttpResponseRedirect(reverse("main:upload"))
在models.py
中这个
from djongo import models
from django.utils import timezone
from django.contrib.auth.models import User
class kokyaku(models.Model):
顧客CD = models.IntegerField(blank=True)
顧客補助CD = models.IntegerField(blank=True)
顧客名称1 = models.TextField(blank=True)
顧客名称 = models.TextField(blank=True)
顧客名称カナ = models.TextField(blank=True)
法人名称 = models.CharField(max_length=15, blank=True)
代表者名称 = models.CharField(max_length=15, blank=True)
住所 = models.TextField(blank=True)
電話番号 = models.IntegerField(blank=True)
地区名称 = models.TextField(blank=True)
データマッチ用電話番号 = models.IntegerField(blank=True)
契約状態 = models.CharField(max_length=2, blank=True)
def __str__(self):
return self.顧客名称
如您所见,我正在尝试将从views
到models
的列与python的dict
“匹配”,但在models
中,我试图将它作为变量来获得,所以我的程序引发并错误地使用msg:int() argument must be a string, a bytes-like object or a number, not 'dict'
,但我不确定如何更改格式以将信息以dict
的形式传递给models
,或者更改格式以使models
能够处理此问题。
发布于 2019-12-24 07:32:44
您可以简单地尝试键入它们,而不是为每个实例保存表单,您只需像这样将实例添加到数据库中即可。(即使是for也能工作,只需确保正确地键入它们,并且int()中没有奇怪的字符串)
for line in lines:
column = line.split(",")
kokyaku.objects.create(顧客CD = column[0], 顧客補助CD = int(column[1]),顧客名称1=str(column[2]), 顧客名称=str(column[3]), 顧客名称カナ=str(column[4]), 法人名称=str(column[5]), 代表者名称=str(column[6]),住所=str(column[7]), 電話番号=str(int(column[8])),地区名称=str(column[9]),データマッチ用電話番号=int(column[10]),契約状態=str(column[11]))
直接导入数据,您可能需要查看 表库 库。有一些有用的、有效的工具。具体来说,在django中,您可以使用django-进出口,它们可以很好地处理tablib。
https://stackoverflow.com/questions/59465133
复制相似问题