Django Tenants не переключается между арендаторами

Для разработки своего проекта я использую лабораторию django-tenants. Для каждого зарегистрированного пользователя создается арендатор. Доступ к арендатору должен осуществляться через подпапку project-url.ru/user/<username>/..., а не через поддомен <username>.project-url.ru/...

Однако при входе в приложение арендатора Django не меняет tenant/scheme на user, а остается в public.

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

setting.py

SHARED_APPS = [
    'django_tenants',
    'users',
    ...,
]

TENANT_APPS = [
    'products',
    ...
]

INSTALLED_APPS = SHARED_APPS + [app for app in TENANT_APPS if app not in SHARED_APPS]


TENANT_MODEL = 'users.Tenant'
TENANT_DOMAIN_MODEL = 'users.Domain'
PUBLIC_SCHEMA_URLCONF = 'users.users-urls'
TENANT_SUBFOLDER_PREFIX = '/user'

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

MIDDLEWARE = [
    'django_tenants.middleware.TenantSubfolderMiddleware',
    ...
]

Создание нового арендатора

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')
    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}')

В БД создана новая схема. Я проверил. Вот настройки урлов:

users-url.py

urlpatterns = [
    path('<str:username>/products/', include('products.products-urls', namespace='products')),
    path('<str:username>/storage/', include('storage.storage-urls', namespace='storage')),
    ...

]

products-urls.py

urlpatterns = [
    ...

    path('items-list/', items_list, name='items-list'),
    ...
]

Авторизация:

def login(request):

    error_msg = ''

    if request.POST:
        logger.debug(f"Login request")
        form = UserLoginForm(data=request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = auth.authenticate(username=username, password=password)
            if user:
                logger.debug(f"User {username} authenticated")
                auth.login(request, user)
                return redirect(f'/{username}/products/items-list/')

После успешной авторизации должно выполняться следующее

@transaction.atomic
def items_list(request, username):
    logger.debug(f'Current connected schema: {connection.schema_name}')

    context = {
        'username': UserClass.objects.get(username=username),
        'items_list': ItemsClass.objects.order_by('name'),
    }

    return render(request, 'products/items/items_list.html', context)

Но на странице я поймал ошибку, что некоторые поля не могут быть найдены в БД, потому что они есть только в приложении арендатора.

ProgrammingError at /aaa/products/items-list/
relation "products_itemsclass" does not exist
LINE 1: ...fats", "products_itemsclass"."carbohydrates" FROM "products_...

В журнале

2024-08-19 12:18:23,979 - DEBUG (item_view.items_list): Current connected schema: public

А должно быть <username>_schema. Пожалуйста, помогите разобраться, почему так происходит...

Я следую документации: https://django-tenants.readthedocs.io/en/latest/install.html#sub-folder-support

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