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

时间:2011-06-01 22:13:36

标签: python django file

我正在编写一个Django应用程序,它需要一个Script对象,该对象既可以访问包含脚本的文件,也可以访问脚本的全文。脚本文件是一个xls文件,我在从中提取数据或以编程方式将数据写入其中时没有任何问题(xlrd和朋友很棒!),我将它存储在models.FileField中。我想将全文存储在models.TextField中,但我的问题是我不知道如何正确地将工作流放在一起,以便全文和存储的文件相互镜像。

我想要的工作流程:

创建脚本对象 - >文件上传到文件字段 - >从文件中提取的文本保存到全文字段

脚本全文编辑 - >文本字段中写回文件的文本 - >脚本已保存

脚本文件替换为新文件 - >从文件中提取的文本保存到全文字段

我一直在使用信号框架(presave和postave),但我不知道如何制作它,呃,保存我希望的更改,因为这需要调用save->生成无限循环。此外,似乎在上传文件之前调用了presave(使用表单),这让我的服务器对我不好。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

事实证明我是在过度设计这个问题。我实际上寻找的信号是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()

仍然,是的,需要更多一点才能使其与全文中的更改一起触发对文件的写入。对不起,好吧,问一个愚蠢的问题。我希望这个答案至少对其他人有用。