如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?
Posted
技术标签:
【中文标题】如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?【英文标题】:How do I save a NamedTemporaryFile into a model FileField in Django? 【发布时间】:2010-09-27 14:14:04 【问题描述】:我创建了一个 NamedTemporaryFile,在其中添加了一些内容,现在我想将它保存到模型 FileField 中。
问题是我收到了 SuspiciousOperation,因为 tmp 目录不在 FileSystemStorage 目录中。
这样做的正确方法是什么?
【问题讨论】:
【参考方案1】:您希望 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
【讨论】:
【参考方案2】:我最终采用了 romke 解释的相反方式:我正在 MEDIA_ROOT 中创建临时文件。
另一种解决方案是使用 /tmp 中的文件,然后将其移动到 MEDIA_ROOT。
我最初的困惑来自表单处理上传文件的方式:它们位于 /tmp 目录(或内存中),然后自动移动到 upload_to 目录。我在 Django 中寻找一种通用的方法。
【讨论】:
以上是关于如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?的主要内容,如果未能解决你的问题,请参考以下文章