我正在构建一个django应用,让人们上传将存储在S3中的CSV(基于django-storages
),然后由芹菜任务处理,然后将它们摄取到数据库中。
这些CSV可以是任意大小,从几行(Django将其存储为InMemoryUploadedFile
)到数百兆字节(django将使用TemporaryUploadedFile
。)
我在通用ModelForm
上使用简单CreateView
,但我想添加一种方法来检查文件中的第一行(标题)以验证CSV是否有我需要的所有列。
如果我知道文件的路径,这将非常简单。我只是使用python的标准文件和csv处理功能来读取csv
模块的第一行并检查字段。但是,我如何使用上传的文件,它可能在内存中,或者它可能是一个临时文件,在模型中?
答案 0 :(得分:1)
这个答案不会为你解释,但它应该足以解锁你。
从Django documentation的外观中,您可以使用内置方法来获取" TemporaryUploadedFile"的临时文件路径:
TemporaryUploadedFile.temporary_file_path()
要完成这一切,您必须在代码中使用一些逻辑来确定它是否是" InMemoryUploadedFile"或者" TemporaryUploadedFile"。从那里,您可以以不同方式查看每个对象以评估列。