使用依赖于环境的存储而不会触发“未生成的迁移”警告

时间:2019-04-09 10:06:20

标签: django amazon-s3 django-models

说我有一个代码库,该代码库在开发环境中使用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/'),
    ),
]

是否有定义其他文件存储的干净方法?还是其他避免这种迁移怪癖的方法?

0 个答案:

没有答案