Дублирование таблиц, созданных в миграциях 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? Возможно, мой маршрутизатор плохо реализован?
Любая помощь будет оценена по достоинству.