上传excel数据到django而不保存文件

我是Django的新手,我绝望帮助上传和阅读Excel数据,而不实际上保存在机器上的数据。 我已经写了一些代码,并采取了一些我在网上做的研究。

这些是我的问题:
1.如何上传一个excel文件(不保存在机器上)。 我只想要Excel文件来填充一些Django字段,而不是保存它。

  1. 如何让django读取excel文件中的列并将其馈送到另一页上的其他字段。 (我怎么把它们连起来?)

  2. 我见过的大多数文档都要求我对excel文件的名称及其位置进行硬编码。有鉴于此,我不知道用户可能从哪里上传。 请指教。

我的views.py:

from django.shortcuts import render_to_response from django.template import RequestContext from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from credit.models import Document from credit.forms import DocumentForm def list(request): if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): newdoc = Document(docfile = request.FILES['docfile']) newdoc.save() return HttpResponseRedirect(reverse('credit.views.list')) else: form = DocumentForm() documents = Document.objects.all() return render_to_response('credit/list.html', {'documents': documents, 'form': form}, context_instance=RequestContext(request) ) 

我的models.py是:

 class Document(models.Model): docfile = models.FileField(upload_to='documents/') #these are the models I want the excel columns to feed into policies = DecimalNumberField() capital = DecimalNumberField() inflation = DecimalNumberField() 

我的forms.py是:

 import os import xlrd IMPORT_FILE_TYPES = ['.xls', ] class DocumentForm(forms.Form): docfile = forms.FileField(label='Select a file') def clean(self): data = super(DocumentForm, self).clean() if 'docfile' not in data: raise forms.ValidationError(_('The Excel file is required to proceed')) docfile = data['docfile'] extension = os.path.splitext(docfile.name)[1] if not (extension in IMPORT_FILE_TYPES): raise forms.ValidationError(u'%s is not a valid Excel file. Please make sure your input file is an Excel file )' % docfile.name) file_data = StringIO.StringIO() for chunk in docfile.chunks(): file_data.write(chunk) data['file_data'] = file_data.getvalue() file_data.close() try: xlrd.open_workbook(file_contents=data['file_data']) except xlrd.XLRDError, e: raise forms.ValidationError(_('Unable to open XLS file: %s' % e)) return data #i do not want to do this (specify the exact file name). Need an alternative sh = xlrd.open_workbook('documents\june.xls').sheet_by_index(1) inflation = open("inflation.txt", 'w') policies= open("policies.txt", 'w') capital= open("access_to_finance.txt", 'w') try: for rownum in range(sh.nrows): inflation.write(str(rownum)+ " = " +str(sh.cell(rownum, 1).value)+"\n") policies.write(str(rownum)+ " = " +str(sh.cell(rownum, 2).value)+"\n") capital.write(str(rownum)+ " = " +str(sh.cell(rownum, 3).value)+"\n") finally: inflation.close() policies.close() capital.close() 

然后我有一个list.html文件:

 {% if documents %} <ul class="nav nav-tabs"> {% for document in documents %} <li><a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a></li> {% endfor %} </ul> {% else %} <p>Click Upload to go to Upload page</p> {% endif %} <form action="{% url list %}" method="post" enctype="multipart/form-data"> {% csrf_token %} <p>{{ form.non_field_errors }}</p> <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p> <p> {{ form.docfile.errors }} {{ form.docfile }} </p> <p><input type="submit" value="Upload" /></p> </form> 

问题1的答案是:

如果您的上传文件小于FILE_UPLOAD_MAX_MEMORY_SIZE(2.5MB) ,则django将上传的文件放入内存中。 如果您的文件大于2.5MB,则可以在设置文件中更改FILE_UPLOAD_MAX_MEMORY_SIZE