Я настраивал несколько баз данных для нескольких приложений. Я хочу, чтобы мое приложение app1 использовало базу данных db_app1. Я сделал все в руководствах, но когда я пытаюсь пройти аутентификацию, он не направляет базу данных db_app1 в файле настроек, а направляет ее в базу данных по умолчанию. Мне нужно использовать базу данных db_app1 для приложения app1. Чего мне не хватает?
Это мой файл dbRouter.py:
class App1DbRouter(object):
route_app_labels = ['app1']
"""
A router to control app1 app db operations
"""
def db_for_read(self, model, **hints):
"""
Attempts to read app1 models go to db_app1.
"""
if model._meta.app_label in self.route_app_labels:
return 'db_app1'
return None
def db_for_write(self, model, **hints):
"""
Attempts to read app1 models go to db_app1.
"""
if model._meta.app_label in self.route_app_labels:
return 'db_app1'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the app1 app is
involved.
"""
if (
obj1._meta.app_label in self.route_app_labels or
obj2._meta.app_label in self.route_app_labels
):
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'db_app1'
return None
Мой файл settings.py
....
INSTALLED_APPS = [
'app1',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'social_django',
]
....
....
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db_app1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': 'my_password',
'HOST': 'my_host',
'PORT': '3306',
},
}
DATABASE_ROUTERS = ['app1.dbRouter.App1DbRouter',]