Django多个数据库错误的路由

时间:2017-01-31 06:01:34

标签: django django-migrations

我在我的项目中使用了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) 什么可能是问题的原因?

1 个答案:

答案 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

现在工作正常。