Django как использовать отдельную базу данных для аутентификации по умолчанию - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть база данных, созданная из приложения, отличного от django, и я определил информацию о подключении к базе данных, как показано ниже

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('POSTGRES_DB'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': os.environ.get('POSTGRES_HOST'),
        'PORT': os.environ.get('POSTGRES_PORT'),
    }
}

К сожалению, при переносе таблиц, связанных с администратором django, все они go в базу данных по умолчанию.

Я знаю, что можно объявить несколько баз данных и разделить действия чтения и записи для разных баз данных; однако я хотел бы, чтобы все таблицы по умолчанию django admin были созданы в другой базе данных. Скажем, я объявляю вторую базу данных, как показано ниже, как мне убедиться, что django данные, связанные с администратором, перенесены во вторую базу данных, а также прочитаны из нее при входе в django admin?

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('POSTGRES_DB'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': os.environ.get('POSTGRES_HOST'),
        'PORT': os.environ.get('POSTGRES_PORT'),
    },
    'admin':{
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('ADMIN_POSTGRES_DB'),
        'USER': os.environ.get('ADMIN_POSTGRES_USER'),
        'PASSWORD': os.environ.get('ADMIN_POSTGRES_PASSWORD'),
        'HOST': os.environ.get('ADMIN_POSTGRES_HOST'),
        'PORT': os.environ.get('ADMIN_POSTGRES_PORT'),
    }
}

1 Ответ

0 голосов
/ 06 февраля 2020

сначала вы должны оставить словарь по умолчанию пустым

, а затем определить свою базу данных для администратора и не администратора

, например, сделать это

DATABASES = {
    'default':{},
    'nonAdmin': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('POSTGRES_DB'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': os.environ.get('POSTGRES_HOST'),
        'PORT': os.environ.get('POSTGRES_PORT'),
    },
    'admin':{
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('ADMIN_POSTGRES_DB'),
        'USER': os.environ.get('ADMIN_POSTGRES_USER'),
        'PASSWORD': os.environ.get('ADMIN_POSTGRES_PASSWORD'),
        'HOST': os.environ.get('ADMIN_POSTGRES_HOST'),
        'PORT': os.environ.get('ADMIN_POSTGRES_PORT'),
    }
}

, затем после этого вы можете перенести базу данных с помощью

. / manage.py migrate --database = admin

или

. / manage.py migrate --database = nonAdmin

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

с помощью этого метода allow_migrate (db, app_label, model_name = Нет, ** подсказки)

Вы можете сослаться на этот документ https://docs.djangoproject.com/en/3.0/topics/db/multi-db/#topics -db-multi-db-routing

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