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

Django-tenant报错:'No tenant for hostname'及租户创建异常求助

错误排查方案

一、解决「Can't create tenant outside the public schema」错误

  • 检查TenantMiddleware配置,把创建租户的URL排除在中间件处理外。django-tenants的中间件会自动切换请求到对应租户的schema,但创建租户必须在public schema下操作。可以在中间件配置里加EXCLUDE_URLS,或者在视图里手动切换到public schema再创建租户,修正代码示例:
    from django_tenants.utils import schema_context
    
    def post(self, request):
        form = CreatePortalForm(request.POST)
        if form.is_valid():
            getDomain = form.cleaned_data.get('name')
            instance = form.save(commit=False)
            user = User.objects.get(id=request.user.id)
            
            # 强制在public schema下创建租户和域名
            with schema_context('public'):
                tenant = Client(schema_name=getDomain, name=getDomain, created_by=user)
                tenant.save()
                domain = Domain.objects.create(
                    domain=f"{getDomain}.example.com",
                    tenant=tenant,
                    is_primary=True
                )
    
            with schema_context(tenant.schema_name):
                instance.save()
                return HttpResponseRedirect(f'http://{getDomain}.example.com:8000')
        return render(request, "registraton/create_portal.html", {"form": form})
    
  • 确认项目启动时数据库默认schema是public,如果默认schema被修改,也会导致创建租户失败。

二、解决「No tenant for hostname」错误

  • 去掉域名里的端口:数据库Domain表的domain字段别存端口(比如8000),django-tenants匹配租户时会忽略请求端口,只认域名部分。你现在存的是tenant1.example.com:8000,但请求的Host头是tenant1.example.com,自然匹配不上。
  • 配置本地hosts:本地测试时,得把tenant1.example.com这类域名映射到127.0.0.1,否则浏览器解析不了,请求到不了本地服务,中间件找不到租户。
  • 核对数据库记录:检查Domain表的domain字段拼写是否正确,是否和租户正确关联,is_primary是否设为True。
  • 验证Host头匹配:可以在TenantMiddleware里打印request.get_host()的值,对比数据库里的域名记录,确认两者一致。

额外验证

  • 直接在数据库的public schema里查看client和domain表,确认租户的schema_name和域名对应无误。
  • 在Django shell里执行from django_tenants.utils import get_tenant_domain_model; get_tenant_domain_model().objects.get(domain='tenant1.example.com'),看能不能查到对应租户,排查数据是否正确。

内容的提问来源于stack exchange,提问作者ckcAdmin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:57:24