在一处显示所有与租户相关的用户

时间:2019-05-23 20:06:08

标签: python django multi-tenant saas

我正在使用saas模型(Django 2.1)中的应用程序。我使用django租户插件(https://github.com/tomturner/django-tenants)。

我的问题是在“公共”模式中显示所有租户。以查看每个租户有多少用户,能够管理它们等的方式。 将外键放入“用户”模型中的租户并在注册过程中保存此列是一个好的架构解决方案吗?

还有另一种方法吗?

下面是示例,伪代码:

class Tenant(TenantMixin):
    name = models.CharField(_('Name of company'), max_length=50, unique=True)
    on_trial = models.BooleanField(default=True)
    paid_until = models.DateTimeField()
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    auto_create_schema = True

    def __str__(self):
        return self.name

    def get_name(self):
        return self.name


class Domain(DomainMixin):
    pass


class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('Email address'), unique=True)
    first_name = models.CharField(_('First name'), max_length=60, blank=True)
    last_name = models.CharField(_('Last name'), max_length=60, blank=True)
    member_of_company = models.ForeignKey(Tenant, on_delete=models.CASCADE, related_name='users', null=True, blank=True)

1 个答案:

答案 0 :(得分:0)

您可以遍历租户并使用以下代码获取每个租户的用户:

from django.db import connection
from django.contrib.auth import get_user_model
from tenant_schemas.utils import get_tenant_model


UserModel = get_user_model()
TenantModel = get_tenant_model()
for tenant in TenantModel.objects.all():
    connection.set_tenant(tenant)
    tenant_users = UserModel.objects.all()
    # Do whatever you want with your users