Django теряет соединение с Postrgres при создании арендатора

Разработка Django-проекта с использованием django-tenants. При регистрации нового пользователя необходимо создать арендатора на домене хоста с адресом "project-url.ru/username/..."

Вот view.py с регистрацией

def create_user_tenant(request):

   user = UserClass.objects.get(username=request.POST['username'])
   schema_name = f'{user.username}_schema'

   try:
    
        with transaction.atomic():
            tenant = Tenant(schema_name=schema_name, user=user)
            tenant.save()
            logger.debug(f'Tenant {tenant} created')
            domain = Domain(domain=HOST_NAME, tenant=tenant, is_primary=True)
            domain.save()
            logger.debug(f'Domain {domain} created for tenant {tenant}')

        logger.info(f'Tenant for {user.username} was created.')

    except IntegrityError as e:
        logger.error(f'Error creating tenant or domain for user {user.username}: {e}')
   
    except Exception as e:
        logger.error(f'Unexpected error creating tenant or domain for user {user.username}: {e}')

def registration(request):

    error_msg = ''

    with transaction.atomic():
        if request.POST:
            logger.debug(f"Registration request")
            form = UserRegistrationForm(data=request.POST)

            if form.is_valid():
                user = form.save()
                logger.debug(f"User {user.username} has been registered")
                create_user_tenant(request)
                return redirect('login')

            else:
                error_msg = form.error_messages
                logger.debug(f"Registration form is invalid. Error {error_msg}")

    context = {
        'form': UserRegistrationForm(),
        'error_msg': error_msg,
    }
    return render(request, 'users/registration.html', context)

Однако при сохранении арендатора tenant.save() я получаю ошибку:

 The connection 'username_schema' doesn't exist.

В то же время, если я делаю то же самое через оболочку ./manage.py, все работает правильно.

Настройки БД в settings.py:

DATABASES = {
    "default": {
        'ENGINE': "django_tenants.postgresql_backend",
        .....

    }
}

DATABASE_ROUTERS = (
   'django_tenants.routers.TenantSyncRouter',
)

MIDDLEWARE = [
    'django_tenants.middleware.main.TenantMainMiddleware',
    ...

]

Postgres запускается в docker. Проект запущен локально на macos 14.5

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

Также буду благодарен, если подскажете, как организовать доступность арендатора по домену формата "project-url.ru/username/..." (но это уже вторично)

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