Скажем, у меня есть кодовая база, которая использует FileSystemStorage
для загрузки файлов в средах разработки и S3Boto3Storage
в тестовых / производственных средах. По умолчанию файлы загружаются на S3 без предоставления им публичного URL. Это настраивается через параметр ACL (bucket-owner-read
).
Для некоторых полей я хочу использовать общедоступный эквивалент DEFAULT_FILE_STORAGE
(public-read
ACL на S3). Я мог бы реализовать это так:
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/'),
),
]
Есть ли чистый способ определения дополнительных хранилищ файлов? Или каким-то другим способом избежать этой странности?