【发布时间】:2019-08-25 04:16:50
【问题描述】:
我正在尝试为我的 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 变量或请求对象,就像我们可以在视图中访问它们一样,或者将请求对象注入到数据库路由器类的 db_for_read 和 db_for_write 函数中。
【问题讨论】:
-
美好的一天:你已经看到了一些 django-tenant-schema。 -> django-tenant-schemas.readthedocs.io/en/latest/# ?