如何从上传文件中提取文本以填充Django模型字段?
我正在写一个Django应用程序,需要一个脚本对象,这个对象可以访问一个包含脚本的文件和脚本的完整文本。这个脚本文件是一个xls文件,我在提取数据和编程写入数据方面没有问题(xlrd等工具非常好用!),我把它存储在一个models.FileField里。我想把完整文本存储在models.TextField里,但我的问题是我不知道怎么把整个工作流程搭建好,以便完整文本和存储的文件能够相互对应。
我想要的工作流程是:
1. 创建脚本对象 -> 上传文件到文件字段 -> 从文件中提取的文本保存到完整文本字段
2. 编辑脚本完整文本 -> 将文本写回文件字段中的文件 -> 保存脚本
3. 用新文件替换脚本文件 -> 从文件中提取的文本保存到完整文本字段
我一直在尝试使用信号框架(presave和postsave),但我不知道怎么才能实现我想要的保存更改,因为这会导致调用保存->生成无限循环。而且,presave似乎在文件上传之前就被调用(使用表单),这让我服务器崩溃了。
有没有什么好的主意?
1 个回答
1
结果发现,我对这个问题想得太复杂了。其实我真正需要的信号是 post_init,而我写的那个函数实际上就是
@receiver(post_save, sender=Script)
def retrieve_fulltext(sender, **kwargs):
script = kwargs['instance']
s = open(script.script.path)
text = s.read()
if script.fulltext == text:
return else: script.fulltext = text
script.save()
不过,是的,它确实还需要一些额外的工作,才能让全文本的变化触发写入文件。抱歉,Stack Overflow,我问了个傻问题。希望这个回答至少对其他人有用。