如何在django中使用自定义用户模型创建多种类型的用户?

问题描述:

我想在django应用程序中创建多种类型的用户,例如一个用于公司,一个用于员工。如何在django中使用自定义用户模型创建多种类型的用户?

我想到的是公司将自己注册,然后员工将由公司管理员通过他/她的仪表板创建。

创建后员工将直接登录。

因此(如果可能)只有一个登录表单可以用于公司和员工。

class Company(models.Model): 
    name = models.CharField(max_length=150) 
    logo = models.CharField(max_length=1000, blank=True) 
    admin_name = models.CharField(max_length=200) 
    admin_email = models.CharField(max_length=200) # can be used as 'username' 
    website = models.CharField(max_length=200, blank=True) 

class CustomUserManager(auth_models.BaseUserManager): 
    def create_user(self, email, first_name, emp_id, password): 
     # 
    def create_superuser(self, email, first_name, emp_id, password): 
     # 

class Users(auth_models.AbstractBaseUser, auth_models.PermissionsMixin): 
    company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True) 
    first_name = models.CharField(max_length=200) 
    last_name = models.CharField(max_length=200) 
    profile_pic = models.CharField(max_length=2000, blank=True) 
    email = models.EmailField(unique=True, null=True) 
    emp_id = models.CharField(max_length=50) 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'emp_id', ] 
    objects = CustomUserManager() 

我几乎在任何地方搜索,但找不到任何东西。如果有什么方法可以解决这个问题,请告诉我,否则如果你知道任何窍门来完成这件事情,那么也欢迎。 在此先感谢。

+0

此功能包含在Django中:https://docs.djangoproject.com/en/1.10/topics/auth/default/#groups – IanAuld

您只需创建组为不同类型的用户:

Group.objects.create(name='Company') 

,然后将用户分配到相应的组:

user.groups.add(group) 

这听起来像你可以做的最后一件事是将员工与公司用户相关联,因此您可以像这样添加自定义用户模型:

company_user = models.ForeignKey("self", null=True, blank=True) 

因此,对于这些员工,您可以将该用户与该公司用户相关联,并将其留给公司用户本身为空。

虽然如果您想使用公司外键,您不需要那样做,但您已经有了这种方式来跟踪相关用户。但是,如果一个公司可能有几个“公司用户”,那么可以将员工分组到每个公司。

我希望有帮助。

+0

谢谢...这工作..! :)对不起,虽然晚了回复.. – Niraj

+0

太棒了!很高兴我能帮上忙! –