You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Tenants生产环境租户可见公共模式(public schema)数据的问题求助

Django Tenants生产环境租户可见公共模式(public schema)数据的问题求助

我最近把我的Django应用迁移到了django-tenants,本地测试一切正常——新建租户后完全看不到public schema的专属数据,和预期一致。但是部署到生产环境后出问题了:我创建了一个名为doyang的租户(对应的schema是doyangrlt),数据库里查这个schema的所有表都是空的,但在这个租户的admin后台里,居然能看到public schema里的数据,这完全不符合预期!

以下是我settings.py里的关键配置项,麻烦各位帮忙看看哪里出了问题:

# Application definition
SHARED_APPS = [
    'django_tenants',
    'tenant_manager',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.postgres',
    'django.contrib.sites',
    'widget_tweaks',
    "django_tables2",
    'django_filters',
    'bot',
    'CCDC'
]

TENANT_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.postgres',
    'django.contrib.sites',
    'bot',
]

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

MIDDLEWARE = [
    'django_tenants.middleware.main.TenantMainMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'tlgrmbot.urls'
PUBLIC_SCHEMA_URLCONF = 'tlgrmbot.urls_public'

# Database
DATABASES = {
    'default': {
        'ENGINE': 'django_tenants.postgresql_backend',
        'NAME': os.environ.get('DB_NAME_BOT'),
        'USER': os.environ.get('DB_USER_BOT'),
        'PASSWORD': os.environ.get('DB_PWD_BOT'),
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

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

TENANT_MODEL = "tenant_manager.Tenant"
TENANT_DOMAIN_MODEL = "tenant_manager.Domain"
SHOW_PUBLIC_IF_NO_TENANT_FOUND = True

我已经排查过的点:

  • 生产环境的数据库连接配置正确,确实连接到了对应的PostgreSQL实例
  • 租户doyang和对应的Domain记录都已正确创建,schemadoyangrlt也存在且表为空
  • 本地环境的配置和生产几乎一致(除了数据库凭据和静态文件相关的whitenoise),但本地完全正常

有没有可能是中间件顺序的问题?或者是路由配置、租户模型的问题?麻烦各位大佬帮忙分析一下,谢谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:23:04