Как настроить корневой файл медиа для многопользовательского приложения в django
Я создаю многопользовательское приложение на django. Я выбрал "Isolated database with a shared app server" с этого сайта - https://books.agiliq.com/projects/django-multi-tenant/en/latest/isolated-database.html. Я использую django-storages с AWS S3 bucket. Проблема Я не смог понять, как настроить файл MediaRoot для разных баз данных в файле настроек django. Есть ли какая-нибудь опция в файле настроек, чтобы использовать mediaroot с условием if. Например, если я использую db_1, то используйте этот mediaroot_1, если использую db_2, то используйте mediaroot_2. Это необходимо для того, чтобы взимать плату с клиента в соответствии с использованием aws bucket.
settings.py
DATABASE_ROUTERS = ["core.router.TenantRouter"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'db_1': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db_1.sqlite3',
},
'db_2': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db_2.sqlite3',
},
}
#### the below I need if statement for different database
#### I want to use bucket_1 for db_1 and so on
AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME")
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
Я пытался перенести get_current_db_name() из middleware.py в settings.py, но у меня не получилось. Я пробовал django-tenant-schemas и другие подобные пакеты, но я хотел бы обойтись без сторонних пакетов.
######## middleware.py
import threading
from .utils import tenant_db_from_request
THREAD_LOCAL = threading.local()
class TenantMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
db = tenant_db_from_request(request)
setattr(THREAD_LOCAL, "DB", db)
response = self.get_response(request)
return response
def get_current_db_name():
return getattr(THREAD_LOCAL, "DB", None)
def set_db_for_router(db):
setattr(THREAD_LOCAL, "DB", db)