Варианты хранения ImageField в зависимости от настроек
Я использую django-storages с бэкендом Azure. Я хотел бы использовать локальное решение Django при локальном запуске и хранилище Azure при запуске в продакшене. Как я могу изменить это в зависимости от настроек? Можно ли просто использовать оператор IF под этими параметрами?
# local
image = models.ImageField(upload_to="profile_pics", blank=True, null=True)
# production
image = models.ImageField(upload_to="profile_pics", blank=True, null=True, storage=AzureMediaStorage())
Вы можете установить хранилище по умолчанию в файле settings.py здесь, и изменить его для производственного или отладочного окружения. Это изменит хранилище во всем приложении.
Если вы хотите установить хранение только для некоторых полей, вы можете использовать callable:
from django.conf import settings
from django.db import models
from .storages import MyLocalStorage, MyRemoteStorage
from django.core.files.storage import default_storage
def select_storage():
return default_storage if settings.DEBUG else AzureMediaStorage()
class MyModel(models.Model):
image = models.ImageField(upload_to="profile_pics", blank=True, null=True, storage=select_storage)