Я пытаюсь реализовать поддержку нескольких баз данных для моего django существующего приложения. Я уже попробовал подход, представленный в официальной документации dajngo.
Но мое требование совершенно отличается от того, что указано в документации.
В функциях django вы можете вызывать request.session. ['User'] и выполнять действия на его основе. В моем случае я хотел бы иметь возможность переключать базы данных в зависимости от переменной сеанса, назначенной во время входа в систему.
Есть ли в любом случае, чтобы добавить запрос / сеанс в методы db_for_read () и db_for_write (), как в следующем
class DataBaseRouter:
def db_for_read(self, model, **hints):
if request.session['user'] == "Some value":
return "master"
return "default"
def db_for_write(self, model, **hints):
if request.session['user'] == "Some value":
return "master"
return "default"
В настоящее время я использую Django 2.0.1, и я попробовал следующий код, я не уверен, что это правильный подход или нет, вот что я реализовал, и я не смог получить доступ к объектам сеанса или запроса.
from django.http import HttpRequest
class DataBaseRouter:
def db_for_read(self, model, **hints):
request = HttpRequest()
if request.session['user']=="Value":
return 'second'
return first
def db_for_write(self, model, **hints):
request = HttpRequest()
if request.session['user']=="Value":
return 'second'
return first
Я ожидаю получить доступ к переменным Session или объекту запроса точно так же, как мы можем получить к ним доступ в Views или способе добавления объекта запроса в функции db_for_read и db_for_write класса маршрутизатора базы данных.