В моем проекте Django у меня есть несколько приложений, одно из них email_lists
, и это приложение выполняет большое количество операций чтения данных из модели Customers
. В моей производственной среде у меня есть две базы данных: default
и read-replica
. Я хотел бы, чтобы все запросы в конкретном модуле выполнялись к базе данных replica-set
.
Я могу сделать это, если я явно укажу запросу сделать это:
def get_customers(self):
if settings.ENV == 'production':
customers = Customer.objects.using('read-replica').filter()
else:
customers = Customer.objects.filter()
но этот модуль имеет более 100 запросов к Customer
и другим моделям. У меня также есть запросы к таким отношениям, как:
def get_value(self, customer):
target_sessions = customer.sessions.filter(status='open')
carts = Cart.objects.filter(session__in=target_sessions)
идея в том, что я хочу избежать написания:
if settings.ENV == 'production':
instance = Model.objects.using('read-replica').filter()
else:
instance = Model.objects.filter()
для каждого запроса. В моем проекте есть и другие места, которые нужно читать из базы данных default
, поэтому это не может быть глобальная настройка. Мне просто нужен этот модуль или файл для чтения с помощью реплики.
Возможно ли это в Django, есть ли ярлыки?
Спасибо