是的,有点复杂。
您可以通过多种方式实现它。基本上,您需要某种方式来指示哪些模型与哪个数据库相关联。
第一个选项
这是我使用的代码;希望对您有所帮助。
from django.db import connections
class DBRouter(object):
"""A router to control all database operations on models in
the contrib.auth application"""
def db_for_read(self, model, **hints):
m = model.__module__.split('.')
try:
d = m[-1]
if d in connections:
return d
except IndexError:
pass
return None
def db_for_write(self, model, **hints):
m = model.__module__.split('.')
try:
d = m[-1]
if d in connections:
return d
except IndexError:
pass
return None
def allow_syncdb(self, db, model):
"Make sure syncdb doesn't run on anything but default"
if model._meta.app_label == 'myapp':
return False
elif db == 'default':
return True
return None
这种工作方式是我创建一个文件,其中包含要使用的数据库名称来保存我的模型。在您的情况下,您将创建一个名为 asterisk.py 的单独的 models 样式文件,该文件与您的应用的模型位于同一文件夹中。
在您的 models.py 文件中,您将添加
from asterisk import *
然后,当您实际从该模型请求记录时,它的工作方式如下:
records = MyModel.object.all()
-
MyModel 的模块是myapp.asterisk
- 有一个名为“星号”的连接,所以使用
它而不是“默认”
第二个选项
如果您想对数据库选择进行每个模型的控制,可以使用以下方法:
from django.db import connections
class DBRouter(object):
"""A router to control all database operations on models in
the contrib.auth application"""
def db_for_read(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def db_for_write(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def allow_syncdb(self, db, model):
if hasattr(model,'connection_name'):
return model.connection_name
return None
那么对于每个模型:
class MyModel(models.Model):
connection_name="asterisk"
#etc...
请注意,我没有测试过第二个选项。