Django - команда createsuperuser создает суперпользователя в базе данных по умолчанию при передаче параметра --database

В моем проекте есть три базы данных Postgre:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'default',
        'USER': 'user',
        'PASSWORD': 'password',
    },
    'clients_db': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'clients_db',
        'USER': 'user',
        'PASSWORD': 'password',
    },
    'other': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'other',
        'USER': 'user',
        'PASSWORD': 'password',
    },
}

И три приложения: клиенты, пользователи и myapp.

У приложения clients есть маршрутизатор для базы данных clients_db:

class ClientsRouter:

    route_app_labels = {'clients'}

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'clients_db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label in self.route_app_labels:
            return 'clients_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        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 == 'clients_db'
        return None

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

python manage.py makemigrations

Затем, чтобы применить миграции к базе данных default:

python manage.py migrate

И для применения миграций к другой базе данных:

python manage.py migrate --database other

Но когда я пытаюсь выполнить команду для создания суперпользователя в базе данных other, она создает суперпользователя в базе данных default вместо этого. Команда:

python manage.py createsuperuser --database other

Установленные приложения:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
    'clients',
    'users',
    'myapp',
    'django_filters',
    'widget_tweaks',
]

Насколько я понял из документации (https://docs.djangoproject.com/en/4.1/ref/django-admin/#createsuperuser), команда должна работать и создавать суперпользователя в указанной базе данных. Есть идеи, что я упускаю?

Прошло некоторое время, но поскольку других ответов не было, я выкладываю, как я обошел проблему, указанную в вопросе: Я использовал shell для копирования пользователя из базы данных default в базу данных other с помощью следующих команд:

python manage.py shell

from django.contrib.auth import get_user_model
Users = get_user_model()
u = Users.objects.get(pk=1)
u.save(using='other')

Вторая и третья строки нужны потому, что я использую пользовательскую модель пользователя. Если используется стандартная модель пользователя, то команды будут следующими:

python manage.py shell

from django.contrib.auth.models import User
u = Users.objects.get(pk=1)
u.save(using='other')

Последнее: у меня есть многопользовательское промежуточное ПО, которое использует потоки, и я думал, что это вызывает проблему, описанную в вопросе, но для меня странно, что даже при использовании shell это происходит. В любом случае, вот как я решил эту проблему.

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