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

时间:2016-08-12 18:22:45

标签: python django multiple-users django-custom-user

我想在django app中创建多种类型的用户,例如一个用于公司,一个用于员工。

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

创建后,员工将直接登录。

所以(如果可能的话)只有一种签到形式可以用于公司和员工。

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()

我几乎到处搜索但找不到任何东西。如果有任何方法可以解决这个问题,请让我知道,如果你知道任何技巧来完成这件事,那么也欢迎。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以为不同类型的用户创建群组:

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

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

user.groups.add(group)

听起来你可以做的最后一件事是将员工与公司用户联系起来,这样你就可以像这样为你的用户模型添加一个自我引用:

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

因此,对于这些员工,您可以将用户与该公司用户关联,并将其留空以供公司用户使用。

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

我希望有所帮助。