Django中的角色

问题描述

我正在创建基于Web的系统,其中有5个或6个不同的角色和访问类型。我研究了如何实现这一点,并且只有在django admin中创建组并将用户分配到其中时(而不是从管理部分开始),才可以完成所有操作。我需要从视图中创建它。我已经有一个表单,可以通过电子邮件用户添加内容,并可以使用下拉菜单设置角色类型。

任何建议都会受到赞赏,因为到目前为止,我还不知道如何在不从django admin中分配用户的情况下实现这一目标。

用户的我的model.py:

class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifiers
    for authentication instead of usernames.
    """
    def create_user(self,email,password,**extra_fields):
        """
        Create and save a User with the given email and password.
        """
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email,**extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self,**extra_fields):
        """
        Create and save a SuperUser with the given email and password.
        """
        extra_fields.setdefault('is_staff',True)
        extra_fields.setdefault('is_superuser',True)
        extra_fields.setdefault('is_active',True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(email,**extra_fields)


class CustomUser(AbstractUser):

    username = None
    email = models.EmailField(_('email address'),unique=True)

    USERNAME_FIELD = 'email'
    required_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email

    ADMIN = 1
    RECEPTION = 2
    HEADOFDEPARTMENT = 3
    EMPLOYEE = 4
    PATIENT = 5
    NOTACTIVE = 6

    ROLE_CHOICES = (
        (ADMIN,'Admin'),(RECEPTION,'Reception'),(HEADOFDEPARTMENT,'HeadOfDepartment'),(EMPLOYEE,'Employee'),(PATIENT,'Patient'),(NOTACTIVE,'NotActive'),)
    role                            = models.PositiveSmallIntegerField(choices=ROLE_CHOICES,blank=True,default=True,null=True)
    #email                           = models.EmailField(verbose_name="email",max_length=60,unique=True) 
    username                        = models.CharField(max_length=30,default='')
    is_superuser                    = models.BooleanField(default=True)
    is_admin                        = models.BooleanField(default=True)
    is_employee                     = models.BooleanField(default=True)
    is_headofdepartment             = models.BooleanField(default=True)
    is_reception                    = models.BooleanField(default=True)
    is_patient                      = models.BooleanField(default=True)
    is_active                       = models.BooleanField(default=True)
    is_staff                        = models.BooleanField(default=True)

解决方法

像这样

from django.contrib.auth.models import Group

def ViewFunc(request):
    ... #your func
    role = Group.objects.get(name='role') 
    role.user_set.add(user)

您以所需的方式在视图中检索用户对象,将其添加到组中的用户集中,完成。

编辑 将用户Foo添加到Admins组中。

from django.contrib.auth.models import Group,User


def ViewFunc(request):
    user = User.objects.get(username = 'Foo')
    role = Group.objects.get(name='Admins') 
    role.user_set.add(user)