Как перенести только необходимые таблицы моделей при использовании нескольких БД в django

Я пробовал переносить модели при использовании нескольких БД в django. Он создает все таблицы в обеих БД по умолчанию, можем ли мы настроить его так, чтобы ненужные таблицы не создавались в БД.

Я использую это прямо сейчас для миграции.

def allow_migrate(self, db, app_label, model_name=None, **hints):
    # checking if model hasattr() to migrate in which db
    if hints:
        if hasattr(hints['model'],'use_db'):
            return db == getattr(hints['model'],'use_db')
    return None

Создайте каталог router в корневой папке. Создайте в нем файл router.py, предположим, что у вас есть две базы данных, настроенные в settings.py, одна с именем 'primary', а другая 'secondary'

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

class Secondary:
    route_app_labels = ['categories','products']
    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.route_app_labels:
            return db == 'secondary'
        return None

class Primary:
    route_app_labels = ['account',
                    'admin',
                    'auth',
                    'authtoken',
                    'contenttypes'] 
    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label in self.route_app_labels:
            return db == 'primary'
        return None

База данных и маршруты в файле settings.py:

DATABASES = {
    'primary': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': config('POSTGRES_DB_NAME'),
        'USER': config('POSTGRES_DB_USER'),
        'PASSWORD': config('POSTGRES_DB_PASSWORD'),
        'HOST': config('POSTGRES_DB_HOST'),
        'PORT': config('POSTGRES_DB_PORT'),
        'TEST': {
            'DEPENDENCIES': [],
        },
    },
    'secondary': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': config('MYSQL_DB_NAME'),
        'USER': config('MYSQL_DB_USER'),
        'PASSWORD': config('MYSQL_DB_PASSWORD'),
        'HOST': config('MYSQL_DB_HOST'),
        'PORT': config('MYSQL_DB_PORT'),
        'TEST': {
            'DEPENDENCIES': ['primary'],
        },
    }

DATABASE_ROUTERS = ['routers.router.Primary', 'routers.router.Secondary', ]

Примечание: Убедитесь, что предыдущие миграции очищены/удалены, иначе предыдущие миграции создадут таблицы.

Вернуться на верх