如何动态地将django组添加到请求用户

时间:2016-03-06 19:06:29

标签: django django-rest-framework django-users

我有一个名为Employee的模型,它具有员工类别的外键字段(如教师,非教学或图书管理员)。我有两个小组叫做“图书馆管理”和“教师管理”。

这是我的员工模型代码

class EmployeeAdmission(User):

    User.username = models.CharField(max_length=50)
    User.password = models.CharField(max_length=50)

    employee_number =models.CharField(max_length=10)
    joining_date = models.DateField()
    employee_first_name = models.CharField(max_length=20)
    employee_middle_name = models.CharField(max_length=20,blank=True)
    employee_last_name = models.CharField(max_length=20,blank=True)
    employee_email = models.EmailField(max_length=254)
    gender = models.CharField(choices=GENDER,max_length=20)
    date_of_birth = models.DateField()
    employee_category = models.ForeignKey(AddEmployeeCategory,on_delete=models.CASCADE,related_name='employee')
    job_title = models.CharField(max_length=35)
    qualification = models.CharField(max_length=30)
    Experience_info = models.TextField(max_length=200)
    total_experience = models.CharField(max_length=20,choices=YEAR)

我做了一些员工类别,如老师和图书管理员

我的逻辑基于发布请求时的类别。 如果employee_category为1.则检查Library Management组并将该组添加到请求用户,或者employee_category为2,然后检查Library Management组并将该组添加到请求用户。

这是我的employee.views.py

代码
@csrf_exempt
def post(self, request, format=None):
    json = JSONRenderer().render(request.data)
    stream = BytesIO(json)
    data = JSONParser().parse(stream)
    serializer = EmployeeDetailSerializer(data=data)
    if serializer.is_valid():

        category = serializer.fields.get('employee_category',default=None)

        if (category == 1 ):
            library_group = Group.objects.get(name='Library Management')
            request.user.groups.add(library_group)
            request.user.save()

        else :
            teacher_group = Group.objects.get(name='Teacher Management')
            request.user.groups.add(teacher_group)
            request.user.save()

        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我已提到这些链接here。 我能够保存用户,但我仍然无法将组添加到用户(不反映用户模型)。

任何了解解决方案的人都可以提供帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

经过大量研究后,我找到了答案。

当我使用此代码时。

request.user.groups.add(library_group)
request.user.save()

该组仅保存在管理员不是“EmployeeAdmission”实例的用户上。因此,要获得“EmployeeAdmission”的实例,我就是这样做的。

employee = serializer.save()

获得该模型的实例后,我能够保存它。它反映在数据库中。

我使用的代码就是这个

employee.groups.add(library_group)
employee.save()