如何从上传文件中提取文本以填充Django模型字段?

2 投票
1 回答
873 浏览
提问于 2025-04-16 18:48

我正在写一个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,我问了个傻问题。希望这个回答至少对其他人有用。

撰写回答