Django-导入导出-上传多个文件

时间:2020-01-15 13:35:08

标签: django django-import-export

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

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


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

这是我走了多远:


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

 <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>

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


谢谢

2 个答案:

答案 0 :(得分:0)

有一个依赖项更新破坏了django-import-export。您只需要将tablib版本强制为0.14.0。

django-import-export github上有一个问题:#1064

答案 1 :(得分:0)

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

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

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

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)
相关问题