是的,这有点复杂。
你可以采用多种方式来实现它。基本上,你需要某种方式来指示哪些模型与哪个数据库相关联。
第一种选择
这是我使用的代码,希望能帮到你。
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
这是一个关于IT技术的翻译内容。具体需要翻译的内容如下:
工作原理是我创建一个文件,该文件名为要使用的数据库名称,其中包含我的模型。在你的情况下,你需要创建一个单独的models
样式文件,称为asterisk.py
,它与你的应用程序模型位于同一文件夹中。
在你的models.py
文件中,你会添加:
from asterisk import *
当你从该模型实际请求记录时,它的工作方式如下:
records = MyModel.object.all()
MyModel
的模块是 myapp.asterisk
- 有一个名为“asterisk”的连接,因此请使用它而不是“default”
第二个选项
如果您想要对数据库选择进行每个模型的控制,则可以尝试以下方法:
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"
请注意,我没有测试过这个第二选项。