在 django 中上传和读取 xlsx 文件
Posted
技术标签:
【中文标题】在 django 中上传和读取 xlsx 文件【英文标题】:upload and read xlsx file in django 【发布时间】:2018-11-25 20:40:33 【问题描述】:我第一次在 django 中使用 xlsx 文件。我正在尝试上传 xlsx 文件并将其数据存储在我的模型中。但是我的功能不起作用
这是我的观点.py
def upload(request,pk):
if request.method == "POST":
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
filehandle = request.FILES.get('myfile',False)
workbook = xlrd.open_workbook(filehandle)
worksheet = workbook.sheet_by_index(0)
rows = []
for column in range(worksheet.nrows):
for row in range(worksheet.nrows):
rows.append(worksheet.cell(row, column).value)
for i in range(0,len(rows)):
if i==0:
prodatt = ProductAttribute.objects.get_or_create(name=rows[i],slug=rows[i])
prodatt.save()
rows[0]=prodatt.pk
elif i>=2:
attval = AttributeChoiceValue.objects.get_or_create(name=rows[i],slug=rows[i],attribute=rows[0])
print(attval)
attval.save()
for i,row in range(worksheet.nrows):
if i>1:
for j in row:
if j>0:
a=AttributeChoiceValue.objects.get(name=row[j]).pk
d=li[j-1]:a
d1=**d
prod = Product.objects.get_or_create(name=row[0],attributes=d1,product_type=pk)
print(prod)
prod.save()
elif i==0:
li=[]
for j in row:
if j>0:
li.append(row[j])
workbook.close()
return render(request,'dashboard/list.html')
我的 forms.py 有
class UploadFileForm(forms.Form):
file = forms.FileField()
我的模板有
<form method="post" enctype="multipart/form-data" action="%url 'dashboard:product-upload' pk=product_type.pk%">
% csrf_token %
up
<button type="submit">Upload</button>
</form>
【问题讨论】:
“它不工作”是什么意思?有什么错误吗?它应该在哪里表现不同? @Ralf 我的文件句柄是空的,即如果不是文件句柄:打印(“未收到文件”)输出:未收到文件 【参考方案1】:我用过
workbook = xlrd.open_workbook(filehandle.temporary_file_path())
代替
workbook = xlrd.open_workbook(filehandle)
并添加了
FILE_UPLOAD_HANDLERS = (
'django.core.files.uploadhandler.TemporaryFileUploadHandler',
)
在 settings.py 中,它起作用了
【讨论】:
我收到此错误'/tmp/tmp1054zpgw.upload.xlsx'
以上是关于在 django 中上传和读取 xlsx 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 csv.DictReader 在 django 中上传和读取 csv 文件?