29

我的部署脚本覆盖了媒体和源目录,这意味着我必须将上传目录移出媒体目录,并在提取上传后替换它。

如何指示 django 上传到 /uploads/ 而不是 /media/?

到目前为止,我不断收到 django 可疑操作错误!:(

我想另一种解决方案可能是符号链接?

非常感谢,托比。

4

2 回答 2

57

我做了以下事情:

from django.core.files.storage import FileSystemStorage

upload_storage = FileSystemStorage(location=UPLOAD_ROOT, base_url='/uploads')

image = models.ImageField(upload_to='/images', storage=upload_storage) 

UPLOAD_ROOT在我的settings.py文件中定义:/foo/bar/webfolder/uploads

于 2009-11-13T13:59:54.837 回答
0

虽然接受的答案可能是您想要的,但我们现在有了django3.1 的选项,我们可以通过将函数传递给ImageFieldor的 storage 参数来决定在运行时使用哪个存储FileField

def select_storage():
    return MyLocalStorage() if settings.DEBUG else MyRemoteStorage()


class MyModel(models.Model):
    my_file = models.FileField(storage=select_storage)

看看官方文档。

请注意,当前接受的答案会将变量的实际值写入UPLOAD_ROOT迁移文件。当您将其应用于数据库时,这不会产生任何SQL结果,但如果您经常更改该设置可能会造成混淆。

于 2021-02-18T20:22:45.430 回答