我的部署脚本会覆盖媒体和源目录,这意味着我必须将上传目录移出媒体目录,并在提取上传后将其替换。
如何指示django上传到/ uploads /而不是/ media /?
到目前为止,我一直在收到django可疑操作错误! :(
我想另一种解决方案可能是符号链接?
非常感谢, 托比。
答案 0 :(得分:50)
我做了以下事情:
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
答案 1 :(得分:0)
虽然接受的答案可能是您想要的,但我们现在可以选择 django
3.1,我们可以通过将函数传递给 ImageField
的存储参数来决定在运行时使用哪个存储或FileField
。
def select_storage():
return MyLocalStorage() if settings.DEBUG else MyRemoteStorage()
class MyModel(models.Model):
my_file = models.FileField(storage=select_storage)
看看官方的docs.
请注意,当前接受的答案将变量 UPLOAD_ROOT
的实际值写入迁移文件。当您将其应用于数据库时,这不会产生任何 SQL
,但如果您经常更改该设置,可能会造成混淆。