Django-导入导出-上载多个文件 [英] Django - Import Export - Upload multiple files

查看:100
本文介绍了Django-导入导出-上载多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用django进出口模块,我正在遵循此文档:

Im using django import-export module and Im following this documentation:

https://simpleisbetterthancomplex.com/packages/2016/08/11/django-import-export.html#importing-data

我想创建一个上传页面,用户可以在其中上传多个文件.

I want to create an upload-page where the user can upload multiple files.

这是我走了多远:

views.py

def upload_data(request):
    if request.method == 'POST':
        wo_resource = WorkordersResource()
        pl_resource = PlantResource()
        se_resource = SeriesResource()
        re_resource = ResourcesResource()
        rd_resource = ResourceDemandsResource()
        dataset = Dataset()
        wo_data = request.FILES.get('workorders_key', None)
        pl_data = request.FILES.get('plants_key', None)
        se_data = request.FILES.get('series_key', None)
        re_data = request.FILES.get('resources_key', None)
        rd_data = request.FILES.get('resourcedemands_key', None)
        wo_imported_data = dataset.load(wo_data.read())
        pl_imported_data = dataset.load(pl_data.read())
        se_imported_data = dataset.load(se_data.read())
        re_imported_data = dataset.load(re_data.read())
        rd_imported_data = dataset.load(rd_data.read())
        wo_result = wo_resource.import_data(dataset, dry_run=True)
        pl_result = pl_resource.import_data(dataset, dry_run=True)
        se_result = se_resource.import_data(dataset, dry_run=True)
        re_result = re_resource.import_data(dataset, dry_run=True)
        rd_result = rd_resource.import_data(dataset, dry_run=True)
        if not wo_result.has_errors():
            wo_resource.import_data(dataset, dry_run=False)  
        elif not pl_result.has_errors():
            pl_resource.import_data(dataset, dry_run=False)  
        elif not se_result.has_errors():
            se_resource.import_data(dataset, dry_run=False)  
        elif not re_result.has_errors():
            re_resource.import_data(dataset, dry_run=False) 
        elif not rd_result.has_errors():
            rd_resource.import_data(dataset, dry_run=False) 
        else:
            print(result)
    return render(request,'import.html')


import.html


import.html

 <form class="importform" method="post" enctype="multipart/form-data"> {% csrf_token %}
        <div class="formlabel">
        <label class="uploadlabel">Workorders</label>
        <input class="uploadform" type="file" name="workorders_key" placeholder="Workorders">                
        </div>
        <div class="formlabel">
            <label class="uploadlabel">Plants</label>
            <input class="uploadform"  type="file" name="plants_key" placeholder="Plants">
        </div>
        <div class="formlabel">
        <label class="uploadlabel">Series</label>
        <input class="uploadform"  type="file" name="series_key" placeholder="Series">                
        </div>
        <div class="formlabel">
        <label class="uploadlabel">Resources</label>
        <input class="uploadform"  type="file" name="resources_key" placeholder="Resources">
        </div>
        <div class="formlabel">
        <label class="uploadlabel">Resource Demands</label>
        <input class="uploadform"  type="file" name="resourcedemands_key" placeholder="Resource Demands">                
        </div>
        <button type="submit" class="btn btn-primary">Upload</button>
      </form>


第一个文件中的数据被导入,其他文件中的数据则不导入.


The data from the first file gets imported, the data from the other files not.

谢谢

推荐答案

您需要检查文件上传是否为Null.如果内容为空,则request.FILES将返回键错误.

You need to check that your file uploads are not Null. request.FILES will return the key error if its contents are null.

您需要使用request.FILES.get('file', <default>)设置默认值,其中<default>是另一个文件或None.

You need to set a default value with request.FILES.get('file', <default>) where <default> is either another file or None.

例如,在您的代码中,如果我们将无"作为默认值,则这些行:

For example in your code, if we take None as the default value, the lines:

wo_data = request.FILES['workorders_key']
pl_data = request.FILES['plants_key']
se_data = request.FILES['series_key']
re_data = request.FILES['resources_key']
rd_data = request.FILES['resourcedemands_key']

应成为:

wo_data = request.FILES.get('workorders_key', None)
pl_data = request.FILES.get('plants_key', None)
se_data = request.FILES.get('series_key', None)
re_data = request.FILES.get('resources_key', None)
rd_data = request.FILES.get('resourcedemands_key', None)

这篇关于Django-导入导出-上载多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆