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/..." (но это уже вторично)