Несколько баз данных для нескольких приложений в Django - невозможно направить в соответствующую базу данных для указанного приложения c - PullRequest
0 голосов
/ 10 января 2020

Я настраивал несколько баз данных для нескольких приложений. Я хочу, чтобы мое приложение 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',]

1 Ответ

0 голосов
/ 11 января 2020

Наконец-то это сработало, когда я добавил social_ django и приложение auth в route_app_labels.

route_app_labels = ['mammothholdings','social_django','auth']

Спасибо @engin_ipek за то, что вдохновили меня на решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...