gpt4 book ai didi

django - 上传到 Django 表单时验证文件内容

转载 作者:行者123 更新时间:2023-12-02 17:37:46 25 4
gpt4 key购买 nike

我正在尝试验证上传到 Django Admin 的 CSV 文件 - 以确保它的格式正确等等。

它还依赖于表单中的另一个值,所以我在表单 clean 方法中验证它:

def clean(self):
cleaned_data = super(CSVInlineForm, self).clean()
csv_file = cleaned_data.get('csv_file')
contents = csv_file.read()
# ...validate contents here...
return cleaned_data

我的模型保存方法如下所示:

def save(self, *args, **kwargs):
contents = self.csv_file.read()
# ... do something with the contents here ...
return super(CSVModel, self).save(*args, **kwargs)

当我在 clean 方法中读取文件内容时,问题就来了,我无法读取模型保存方法中的 csv_file(它返回一个空字符串)。在 clean 方法中,我可以读取和解析文件。

文件上传完好无损。

如果我在 clean 方法中注释掉 csv_file.read() 行,save 方法工作正常并且可以读取文件内容。

它的行为好像文件只能读取一次?

如果我重新保存模型,文件读取和解析工作正常。

这一切都在 django admin 中——据我所知,表单正在被正确处理。

最佳答案

由于您使用 .read() 读取了一次文件,因此文件指针不会指向文件末尾。如果您要再次阅读它,则必须重置它。

您可以使用 seek() function 来做到这一点.

因此,要么在 clean 中的 read() 之后,要么在 save 中的 read() 之前方法,做

csv_file.seek(0)

更多 info here

关于django - 上传到 Django 表单时验证文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24611663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com