在 Django ModelForm 中获取 header 个 CSV 文件

Get header of CSV file in Django ModelForm

我正在构建一个 Django 应用程序,它可以让人们上传存储在 S3 中的 CSV(基于 django-storages),然后由芹菜任务处理,然后将它们摄取到数据库中。

这些 CSV 可以是任意大小,从几行(Django 将其存储为 InMemoryUploadedFile)到数百兆字节(Django 将使用 TemporaryUploadedFile。)

我在通用 CreateView 上使用简单的 ModelForm,但我想添加一种方法来检查文件中的第一行(header)以验证CSV 包含我需要的所有列。

如果我知道文件的路径,这将非常简单。我只是使用 python 的标准文件和 csv 处理功能将第一行读入 csv 模块并检查字段。但是我如何使用上传的文件来做到这一点,它可能在内存中,也可能是模型表单中的临时文件?

这个答案不会为你拼出来,但应该足以解封你。

从 Django documentation 的外观来看,您可以使用内置方法获取 "TemporaryUploadedFile":

的临时文件路径
TemporaryUploadedFile.temporary_file_path()

为了总结这一切,您的代码中必须有一些逻辑来识别它是 "InMemoryUploadedFile" 还是 "TemporaryUploadedFile"。从那里,您可以不同地查看每个对象以评估列。