Использование хранилищ, зависящих от среды, без появления предупреждений о «не генерируемой миграции» - PullRequest
0 голосов
/ 09 апреля 2019

Скажем, у меня есть кодовая база, которая использует 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/'),
    ),
]

Есть ли чистый способ определения дополнительных хранилищ файлов? Или каким-то другим способом избежать этой странности?

...