Варианты хранения 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)
Вернуться на верх