模型是否有可能知道哪个租户正在使用它?

Is it possible for Models to know which tenant is using it?

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

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

您的 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

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