如何将一个NamedTemporaryFile保存到Django模型的FileField中?

6
我创建了一个NamedTemporaryFile,向其中添加了一些内容,现在我想将其保存到模型的FileField中。
问题是,我得到了一个SuspiciousOperation错误,因为tmp目录不在FileSystemStorage目录内。
正确的方法是什么?
2个回答

4
你希望Django为你检查它,因为这可以确保文件被放在MEDIA_ROOT目录中,以便可以下载。

无论如何,如果你想将文件放在MEDIA_ROOT之外(在本例中是“/tmp”),你应该像这样做:

from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='/tmp')

class YourModel(models.Model):
    ...
    file_field = models.FileField(..., storage=fs)

查看Django documentation">Django文档


1

我最终采用了与romke相反的方式:我在MEDIA_ROOT中创建临时文件。

另一种解决方案是在/tmp中处理文件,然后将其移动到MEDIA_ROOT。

我的初始困惑来自于表单处理上传文件的方式:它们位于/tmp目录(或内存)中,然后自动移动到upload_to目录。我正在寻找在Django中通用的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接