Guy*_*den 1 django django-admin
我正在尝试验证上传到 Django Admin 的 CSV 文件 - 以确保它的格式正确等等。
它还依赖于表单中的另一个值,所以我在 formsclean方法中验证它:
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
Run Code Online (Sandbox Code Playgroud)
我的模型保存方法如下所示:
def save(self, *args, **kwargs):
contents = self.csv_file.read()
# ... do something with the contents here ...
return super(CSVModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
当我读取 clean 方法中的文件内容时,问题就出现了,我无法读取模型 save 方法中的 csv_file (它返回一个空字符串)。在 clean 方法中,我可以读取和解析文件。
该文件上传完美无缺。
如果我在 clean 方法中注释掉 csv_file.read() 行,则 save 方法可以正常工作并且可以读取文件内容。
它的行为好像文件只能读取一次?
如果我重新保存模型,文件读取和解析工作正常。
这一切都在 django admin 中——据我所知,表单正在被正确处理。
由于您使用 读取了一次文件.read(),因此文件指针不会指向文件的末尾。如果您要再次阅读它,则必须重置它。
你可以用seek()函数来做到这一点。
因此,无论是read()在in方法之后clean还是在read()insave方法之前,请执行
csv_file.seek(0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
834 次 |
| 最近记录: |