假设该应用的第一页有两个链接。是否可以根据点击的链接选择数据库?数据库都具有相同的模型,但数据不同。例如,假设该应用程序包含不同大学A
和B
的学生。如果点击A
的链接,则会使用A
的数据库,其中包含大学A
的学生。此后的整个申请应使用大学数据库A
。
我知道有办法解决这个问题,只是设计不同的数据库,即拥有一个大学领域,并过滤掉具有特定大学附属关系的学生。但我希望找到一个使用Django的解决方案来使用两个不同的数据库。
答案 0 :(得分:1)
因此,您需要将所选数据库存储在session
或smth中,您可以轻松选择数据库。来自docs
>>> # This will run on the 'default' database.
>>> Author.objects.all()
>>> # So will this.
>>> Author.objects.using('default').all()
>>> # This will run on the 'other' database.
>>> Author.objects.using('other').all()
答案 1 :(得分:0)
您可以将Database Routers与此GlobalRequestMiddleware解决方案混合在一起,以创建一个数据库路由器,检查请求以确定要使用的数据库。
class RequestDatabaseRouter(object):
def db_for_read(self, model, **hints):
request = GlobalRequestMiddleware.get_current_request()
key = self.get_database_key(request) # Implement get_database_key
return key
可能有某种方法可以将请求注入**hints
,我认为这比中间件解决方案更可取,但是,我现在还不知道如何处理。您可能需要确保在AuthenticationMiddleware之后调用GlobalRequestMiddleware,否则您可能没有请求用户进行检查。