我在我的项目中使用了3个数据库:
DATABASES = {
'default': {
(postgres, read, write)...
},
'admission_db': {
(postgres, read, write)...
},
'journals_db': {
(mysql, read only)...
}
}
DATABASE_ROUTERS = [
'main.lib.DbRouter.DbRouter',
]
写了db router:
class DbRouter:
...
def allow_migrate(self, db, app_label, model=None, **hints):
if db == 'admission_db':
if model and model._meta.app_label == 'admission':
return True
return app_label == 'admission'
elif db == 'journals_db':
return False
return None
当我制作迁移命令时
python manage.py migrate admission --database admission_db
它正常迁移,但是当我尝试制作
时python manage.py migrate,
它抛出
django.db.utils.OperationalError: no such table: admission_educationform
因为它我可以在其他应用上进行make迁移。 (python 3.5.2,django 1.10.5) 什么可能是问题的原因?
答案 0 :(得分:0)
添加了对magration中使用的db的检查:
def allow_migrate(self, db, app_label, model=None, **hints):
if db == 'default':
if app_label == 'admission':
return False
elif model and model._meta.app_label == 'admission':
return False
if db == 'admission_db':
if model and model._meta.app_label == 'admission':
return True
return app_label == 'admission'
elif db == 'journals_db':
return False
return None
所以,我应该启动2个迁移命令:
python migrate admission
python migrate
现在工作正常。