5

我创建了一个 NamedTemporaryFile,在其中添加了一些内容,现在我想将其保存到模型 FileField 中。

问题是我得到一个 SuspiciousOperation 因为 tmp 目录不在 FileSystemStorage 目录中。

这样做的正确方法是什么?

4

2 回答 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 文档

于 2008-12-19T12:09:13.953 回答
1

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

另一种解决方案可能是使用 /tmp 中的文件,然后将其移动到 MEDIA_ROOT。

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

于 2008-12-19T16:54:01.757 回答