【问题标题】:Is it possible for Models to know which tenant is using it?模型是否可以知道哪个租户正在使用它?
【发布时间】:2019-11-21 22:36:43
【问题描述】:

我提供 SaaS,主要是作为 django 仪表板和自定义管理面板。使用租户,我为每个客户共享一个数据库的一个模式。我遇到的问题是客户应该能够通过管理页面创建对象,并且对象应该创建一个包含租户信息的 url。例如,客户 Y 的 url 为 Y.xzxzxz.com,客户 X 的 url 为 X.xzxzxz.com。将有多种类型的 url 具有相同的前缀。目前我的客户必须手动输入客户前缀。 Models 类是否有可能知道哪个架构正在使用它?

【问题讨论】:

    标签: django multi-tenant


    【解决方案1】:

    你的要求真的一点都不清楚。但我猜测您想知道模型存在于多个数据库中的哪个数据库中。

    您的settings.py 可能有DATABASE 键,例如:

    DATABASES = {
        'default': 'postgres://user:pass@localhost:5432/default',
        'tenant_1': 'postgres://user:pass@localhost:5432/tenant_1',
    }
    

    因此,一旦您保存了一个模型,您就可以确定它存在于哪个数据库中:

    instance = YourModel.objects.create()
    print(instance._state.db)
    # Prints "default" or "tenant_1" depending on which database its in
    

    relevant docs here

    【讨论】:

    • 这是我创建系统所遵循的“模板”:github.com/tomturner/django-tenants 所以我通过终端设置了租户。网址基本上是 self.slug = (self.customerPrefix + ".....local...." + ....") 我得到了 customerPrefix 因为现在我正在手动输入它。我在想如果我想不出另一种方法,关于从管理 url 读取前缀。
    • @JohnDoe,大多数 SO 人在他们的 OSS 和其他活动之上都有一份全职工作。没有人会在您的仓库中为您调试它。我建议您阅读以下内容:stackoverflow.com/help/how-to-ask
    • ...并且还在问题stackoverflow.com/help/minimal-reproducible-example中放了一个最小的可重现示例
    • 我并不是想让您认为我希望有人通读这些内容,只是数据库中有一小部分显示我以不同的方式设置它。但这些都不是必需的,我只是问了一个不一定与任何调试或实际代码相关的问题。我没想到的只是“不,因为 x”或“是的,我已经完成了 y”
    【解决方案2】:

    我从 django.db 导入 Connection,然后使用 connection.get_tenant().name,我得到了我想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多