Дублирование таблиц, созданных в миграциях django при использовании схем SQL Server

Я хочу поместить все таблицы, специфичные для Django, и мои пользовательские модели Auth в схему по умолчанию dbo, а все мои таблицы, специфичные для различных приложений, в схему, названную по имени приложения. Следует отметить, что все таблицы моих приложений будут иметь внешний ключ к моей модели auth (у меня есть поля _created_by и _last_updated_by в базовой модели, от которой наследуют все приложения). В основном я хочу, чтобы структура БД была примерно такой:

DBO
    - my_custom_auth_table
    - django_migrations
    - django_session
    - django_content_type
    - etc...

APP1
    -table1
    -table2
APP2
    -table1
    -table2

Для достижения этой цели я попробовал создать пару Логин/Пользователь на сервере БД для каждого приложения и реализовал маршрутизатор БД.

мой метод allow_migrate:

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == db:
            return True
        else:
            return False

настройки моей базы данных (я буду использовать мое приложение doglicense в качестве примера):

default_db_settings = {
                'ENGINE': 'mssql',
                'NAME': '***',
                'USER': 'some_user',
                'PASSWORD':'***',
                'HOST':'***',
                'PORT':'1433',
                'OPTIONS':{'driver':'ODBC Driver 18 for SQL Server', 'extra_params': 'trustServerCertificate=yes'},
}

doglicense = {
                'ENGINE': 'mssql',
                'NAME': '***',
                'USER': 'DogLicense',
                'PASSWORD':'***',
                'HOST':'***',
                'PORT':'1433',
                'OPTIONS':{'driver':'ODBC Driver 18 for SQL Server', 'extra_params': 'trustServerCertificate=yes'},
}

Я успешно перенес пользовательское приложение auth и все приложения djangos в dbo, однако здесь начинается веселье.

Если я запускаю:

python manage.py migrate DogLicense --plan

мы видим, что он пытается создать только новые таблицы:

Planned operations:
DogLicense.0001_initial
    Create model Breed
    Create model Color
    Create model Dog
    Create model ZipCode
    Create model Veterinarian
    Create model Street
    Create model Registration
    Create model Owner
    Create model DogType
    Add field owners to dog
    Add field type to dog

Однако, когда я пытаюсь указать подключение к базе данных, чтобы сбросить эти файлы в схему doglicense:

python manage.py migrate DogLicense --plan --database=doglicense

Я получаю:

Planned operations:
contenttypes.0001_initial
    Create model ContentType
    Alter unique_together for contenttype (1 constraint(s))
contenttypes.0002_remove_content_type_name
    Change Meta options on contenttype
    Alter field name on contenttype
    Raw Python operation
    Remove field name from contenttype
auth.0001_initial
    Create model Permission
    Create model Group
    Create model User
auth.0002_alter_permission_name_max_length
    Alter field name on permission
auth.0003_alter_user_email_max_length
    Alter field email on user
auth.0004_alter_user_username_opts
    Alter field username on user
auth.0005_alter_user_last_login_null
    Alter field last_login on user
auth.0006_require_contenttypes_0002
auth.0007_alter_validators_add_error_messages
    Alter field username on user
auth.0008_alter_user_username_max_length
    Alter field username on user
auth.0009_alter_user_last_name_max_length
    Alter field last_name on user
auth.0010_alter_group_name_max_length
    Alter field name on group
auth.0011_update_proxy_permissions
    Raw Python operation ->     Update the content_type of prox…
auth.0012_alter_user_first_name_max_length
    Alter field first_name on user
MSSAuth.0001_initial
    Create model FailedLoginAttempt
    Create model MSSUser
    Create model AuthProfile
DogLicense.0001_initial
    Create model Breed
    Create model Color
    Create model Dog
    Create model ZipCode
    Create model Veterinarian
    Create model Street
    Create model Registration
    Create model Owner
    Create model DogType
    Add field owners to dog
    Add field type to dog

Вы видите, что он хочет создать каждую таблицу заново. И очевидно, что запуск этой миграции без флага --plan действительно приводит к созданию таблиц типа doglicense.django_migrations.

Как предотвратить создание этих дублирующих таблиц? Это проблема с правами пользователя SQL Server? Возможно, мой маршрутизатор плохо реализован?

Любая помощь будет оценена по достоинству.

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