Django upload_to 在 MEDIA_ROOT 外部使用
我的部署脚本会覆盖媒体和源目录,这意味着我必须把上传的目录从媒体目录中移出去,然后在上传完成后再放回去。
我该怎么告诉Django把文件上传到/uploads/而不是/media/呢?
到目前为止,我一直收到Django的可疑操作错误! :(
我想另一个解决办法可能是使用符号链接?
非常感谢,
Toby。
2 个回答
3
虽然被接受的答案可能是你想要的,但现在在 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)
可以看看官方的 文档。
请注意,目前被接受的答案会把变量 UPLOAD_ROOT
的实际值写入迁移文件。当你把它应用到数据库时,这不会产生任何 SQL
语句,但如果你频繁更改这个设置,可能会让人感到困惑。
63
我做了以下操作:
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