在 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"。从那里,您可以不同地查看每个对象以评估列。
我正在构建一个 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"。从那里,您可以不同地查看每个对象以评估列。