Django导入/导出:导入CSV文件错误

时间:2020-06-12 11:52:15

标签: django django-import-export

我花了几个小时尝试调试此问题。我正在尝试将产品目录导入我的应用程序。我正在使用Django Import-export导入csv文件。我试图通过管理网站和一个简单的上传文件导入它。在这两种情况下,我都遇到一些错误。您有解决办法的想法吗?

第一种方法:通过管理网站导入csv文件

遇到错误:导入的文件编码错误:'charmap'编解码器无法解码位置13365的字节0x9d:字符映射到

该方法似乎不能接受某些字符(“”)。如何更改代码以接受任何字符?我已经删除了以下字符:£,-并尝试使用UTF-8对其进行编码。我还进行了搜索以删除所有非ASCII字符(128-255)

2eme方法:通过网站导入csv文件

遇到错误:'MultiValueDict'对象不可调用

views.py

def simple_upload(request):
    if request.method == 'POST':
        file_format = request.POST.get('file-format')
        product_resource = ProductResource()
        dataset = Dataset()
        new_products = request.FILES['Price_List']

        if file_format == 'CSV':
            imported_data = dataset.load(new_products.read().decode('utf-8'),format='csv')
            result = product_resource.import_data(dataset, dry_run=True)                                                                 
        elif file_format == 'JSON':
            imported_data = dataset.load(new_products.read().decode('utf-8'),format='json')
            # Testing data import
            result = product_resource.import_data(dataset, dry_run=True) 

        if not result.has_errors():
            # Import now
            product_resource.import_data(dataset, dry_run=False)

    return render(request, 'catalog/simple_upload.html')

models.py

from import_export import resources
from .models import Product

class ProductResource(resources.ModelResource):
    class Meta:
        model = Product
        skip_unchanged = True
        report_skipped = False

simple_upload.html

{% extends 'base.html' %}

{% block body %}
<h3>Import Data</h3>
<p>importing to database</p>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="importData">
    <p>Please select format of file.</p>
    <select name="file-format" class="form-control my-3">
        <option selected>Choose format...</option>
        <option>CSV</option>
        <option>JSON</option>
      </select>
    <button class="btn btn-primary" type="submit">Import</button>
  </form>

{% endblock %}

非常感谢,

0 个答案:

没有答案