在我的Django应用程序中,我对生成的文件使用FileSystemStorage
。我这样初始化它:
import os
from urlparse import urljoin
from django.conf import settings
from django.core.files.storage import FileSystemStorage
gen_files_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'generated/'), base_url=urljoin(settings.MEDIA_URL, 'generated/'))
当我想创建一个新文件时,我使用:
^{pr2}$那很好。唯一的问题是在Django迁移中,FileSystemStorage
的路径是“硬编码”的。因为我在开发(更改)和生产时使用不同的设置,manage.py makemigrations
命令通常只因为路径更改而生成迁移,尽管数据库中的所有内容都保持不变。在
我知道有一个使用FileSystemStorage
子类的解决方案(见下面我的答案),但是有更好的解决方案吗?在
解决方案是永远不要在生产上运行
makemigrations
。在生产服务器上运行migrate
,但如果与此问题有关,则忽略有关运行makemigrations
的警告。在考虑一下:
makemigrations
生成Python代码,因此在生产上运行它与在该服务器上开发是一样的。根据您的服务器设置,无论makemigrations
警告如何,您的生产站点可能会正确地提供这些文件。在有一个解决方案涉及
FileSystemStorage
的自定义@deconstructible
子类:然后我可以像这样初始化存储:
^{pr2}$这样Django迁移就不会注意到我的设置中的更改。有更好的方法吗?在
我的问题是相关的,但略有不同。字段使用的存储类可以根据设置进行更改:默认本地存储,生产中的远程存储。我实现了一个
FileField
的子类,它在解构迁移生成字段时忽略了存储kwarg。在它可以这样使用:
^{pr2}$相关问题 更多 >
编程相关推荐