【发布时间】:2011-12-24 15:33:22
【问题描述】:
我一直在使用手动数据库选择来处理一个有两个单独数据库的项目。我已经在设置中定义了我的数据库。
经过进一步阅读,似乎数据库路由实际上是解决这个问题的方法。但是,在阅读了此处的文档和一些相关帖子后,我比以往任何时候都更加困惑。
在我的设置中:
DATABASES = {
'default': {
....
},
'my_db2': {
....
}
}
DATABASE_ROUTERS = ['myapp2.models.MyDB2Router',]
我知道我必须像这样定义我的路由器类(我在myapp2.models.py 文件中认为):
class MyDB2Router(object):
"""A router to control all database operations on models in
the myapp2 application"""
def db_for_read(self, model, **hints):
if model._meta.app_label == 'myapp2':
return 'my_db2'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'myapp2':
return 'my_db2'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'myapp2' or obj2._meta.app_label == 'myapp2':
return True
return None
def allow_syncdb(self, db, model):
if db == 'my_db2':
return model._meta.app_label == 'myapp2'
elif model._meta.app_label == 'myapp2':
return False
return None
然后呢?每个型号都需要meta.app_label 还是自动的?
除此之外,我仍然收到一个错误:
django.core.exceptions.ImproperlyConfigured:导入数据库时出错 路由器 JournalRouter:“无法导入名称连接
谁能帮助我了解发生了什么以及出了什么问题?非常感谢任何帮助。
【问题讨论】:
-
好的,我刚刚解决了我自己的问题。路由器类进入 /myapp2 下名为 routers.py 的单独文件。不需要 meta.app_label 因为我猜它是自动分配的。希望这对某人有所帮助。
-
为您的问题创建一个新答案并接受它。
-
如果模型是在
models.py之外定义的,则只需要使用app_label选项,否则会自动分配。