в проекте используется 3 базы данных и роутер баз данных:
DATABASES = {
'default': {
(postgres, читать, писать)...
},
'admission_db': {
(postgres, читать, писать)...
},
'journals_db': {
(mysql, только читать)...
}
}
DATABASE_ROUTERS = [
'main.lib.DbRouter.DbRouter',
]
сам роутер:
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
как победить проблему?
(django 1.10.5, python 3.5.2)
UPD:
изменив allow_migrate():
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 manage.py migrate admission
$ python manage.py migrate
Но уже не появляется ошибка.