我需要Django Admin界面来接受Excel文件的管理员上传,其中每个Excel文件中的数据都插入到我的数据库模型中。如何在Django模型管理页面上显示这样的“上传”按钮,单击该按钮要求管理员选择.xls
文件,其数据在上传完成后会被添加到数据库中?
答案 0 :(得分:7)
我已经这样做了,但我只是设置了一个带文件上传的简单视图(实际上这比直接添加到Django管理页面更有意义,因为一个编辑页面=一个模型实例,我认为你的excel包含多个模型)。
在forms.py中,一个带有文件上传字段的简单表单
class ImportExcelForm(forms.Form):
file = forms.FileField(label= "Choose excel to upload")
在views.py中的,一个处理上传的视图
def test_flowcell(request):
c = RequestContext(request, {'other_context':'details here'})
if request.method == 'POST': # If the form has been submitted...
form = ImportExcelForm(request.POST, request.FILES) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
excel_parser= ExcelParser()
success, log = excel_parser.read_excel(request.FILES['file'] )
if success:
return redirect(reverse('admin:index') + "pages/flowcell_good/") ## redirects to aliquot page ordered by the most recent
else:
errors = '* Problem with flowcell * <br><br>log details below:<br>' + "<br>".join(log)
c['errors'] = mark_safe(errors)
else:
c['errors'] = form.errors
else:
form = ImportExcelForm() # An unbound form
c['form'] = form
return render_to_response('sequencing/file_upload.html')
并按照其他帖子的建议使用xlrd从excel文件中读取数据。我有一个单独的文件ExcelParser.py用于此
import xlrd
class ExcelParser(object, excel_name):
@transaction.commit_on_success
def read_excel(self):
wb = xlrd.open_workbook(excel_name)
...
do your parsing in here.....
...
(我可以补充一点,excel是一种非常糟糕且容易出错的导入数据的方式。我在工作中做了很多工作,并试图说服管理层有更好的解决方案。)
答案 1 :(得分:4)
我不确定Django方面的事情,但您可以使用xlrd来阅读和操作Excel文件。有一个免费的PDF解释这个称为Working with Excel files in Python
答案 2 :(得分:2)
django-import-export可能会有所帮助。
它为管理对象创建了两个“导入”和“导出”按钮,并允许选择多种类型的扩展,包括xls。它还显示数据是否已导入,并在执行执行前要求确认。
您只需要将其包含在INSTALLED_APPS中,并创建要上传的类的导入导出资源,并创建与之前创建的资源类相关的ImportExportModelAdmin的子类,以便在admin中显示按钮。
更多信息:
http://django-import-export.readthedocs.org/en/latest/getting_started.html https://github.com/bmihelac/django-import-export