【发布时间】:2020-06-20 15:51:07
【问题描述】:
我正在尝试创建一个多租户应用程序,其中通过 django 默认用户模型进行身份验证。我使用了自己的自定义用户模型。我想使用具有多个架构的同一个数据库。
用户模型
class UsersManager(BaseUserManager):
def create_user(self, username, password=None, **kwargs):
if not username:
raise ValueError('Users must have a valid username.')
if not kwargs.get('email'):
raise ValueError('Users must have a valid email.')
if not kwargs.get('contact_number'):
raise ValueError('Users must have a valid contact number.')
account = self.model(
username=username, email = kwargs.get('email'), contact_number=kwargs.get('contact_number'),first_name=kwargs.get('first_name'),last_name=kwargs.get('last_name')
)
account.set_password(password)
account.save()
return account
def create_staffuser(self, username, password, **kwargs):
account = self.create_user(username, password, **kwargs)
account.is_admin = False
account.is_superuser = False
account.is_staff = True
account.is_agent = False
account.save()
return account
def create_superuser(self, username, password, **kwargs):
account = self.create_user(username, password, **kwargs)
account.is_admin = True
account.is_staff = True
account.is_superuser = True
account.is_agent = False
account.save()
return account
def create tenant_user(self, username, password, **kwargs):
"""Custom command to create a tenant user"""
... ?????????????????????
class User(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(max_length=50, default=None, null=True)
middle_name = models.CharField(max_length=50, default=None, null=True)
last_name = models.CharField(max_length=50, default = None, null=True)
username = models.CharField(unique=True, max_length=50)
email = models.EmailField(unique=True)
street_address = models.CharField(max_length=150)
city = models.CharField(max_length=50)
contact_number = models.CharField(max_length=40)
alternative_contact_number = models.CharField(max_length=40,default=None, null=True)
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(default=timezone.now)
objects = UsersManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email','first_name','last_name','city','contact_number']
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_agent = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
is_tenant = models.BooleanField(default=False)
租户模型
class Client(TenantMixin):
user = models.ManyToMany('User', related_name='hospital')
paid_until = models.DateField()
on_trial = models.BooleanField()
created_on = models.DateField(auto_now_add=True)
auto_create_schema = True
我正在使用 User 模型在 TenantModel 中创建 many2many 关系。我想要达到的目标:
- 使用用户模型执行身份验证。
- 使用
python manage.py create_tenant_user创建租户 - 创建一个可以访问所有租户数据的超级用户。
【问题讨论】:
-
你用的是什么包?
django-tenant-schemas? -
是的,使用
django-tenant-schemas
标签: python django model multi-tenant