在 drf 中导入 csv 文件

Import csv file in drf

我正在尝试创建一个视图以使用 drf 和 django-import-export 导入 csv。

我的示例(我正在逐步学习调试):

class ImportMyExampleView(APIView):
    parser_classes = (FileUploadParser, )

    def post(self, request, filename, format=None):
        person_resource = PersonResource()
        dataset = Dataset()
        new_persons = request.data['file']
        imported_data = dataset.load(new_persons.read())
        return Response("Ok - Babysteps")

但是我得到这个错误(使用邮递员):

Tablib has no format 'None' or it is not registered.

更改为 imported_data = Dataset().load(new_persons.read().decode(), format='csv', headers=False) 我收到这个新错误:

InvalidDimensions at /v1/myupload/test_import.csv
No exception message supplied

有没有人有任何提示或可以提供参考?我正在关注这个 site,但我不得不“翻译”成 drf。

从小步骤着手是个好主意。我建议先让一个独立的脚本工作,这样你就可以检查文件是否可以读取和导入。

如果您可以设置断点并进入 django-import-export 源代码,这将为您节省大量时间来了解正在发生的事情。

示例测试函数(基于example app):

def test_import():
    with open('./books-sample.csv', 'r') as fh:
        dataset = Dataset().load(fh)
    book_resource = BookResource()
    result = book_resource.import_data(dataset, raise_errors=True)
    print(result.totals)

您可以对此进行调整,以便导入您自己的数据。一旦一切正常,您就可以将它与您的 post() 函数集成。

我建议获取示例应用程序 运行,因为它将演示导入的工作原理。

InvalidDimensions 表示您尝试加载的数据集与 Dataset 预期的格式不匹配。尝试删除 headers=False arg 或显式声明 headers(headers=['h1', 'h2', 'h3'] - 为您的 headers 交换正确的名称)。