说我有一个代码库,该代码库在开发环境中使用FileSystemStorage
进行文件上传,而在测试/生产环境中使用S3Boto3Storage
。默认情况下,文件上传到S3时不提供公共URL。通过ACL参数(bucket-owner-read
)进行配置。
对于某些字段,我确实想使用DEFAULT_FILE_STORAGE
(S3上的public-read
ACL)的公开等效项。我可以这样实现:
my_file = models.FileField(
upload_to='uploads/my_file/',
storage=get_public_storage_backend(),
)
该函数将根据您的环境返回不同的存储后端。事实是,这在开发环境中可以正常工作,但会导致测试/生产认为我的迁移未生成:
operations = [
migrations.AlterField(
model_name='my_model',
name='my_file',
field=models.FileField(storage=my_codebase.storages.S3Boto3PublicStorage(), upload_to='uploads/my_file/'),
),
]
是否有定义其他文件存储的干净方法?还是其他避免这种迁移怪癖的方法?