2016-03-06 75 views
1

我有一個名爲Employee的模型,它具有員工類別的外鍵字段(如老師,非教學或圖書管理員)。我有兩個名爲「圖書館管理」和「教師管理」的小組。如何動態添加Django組到請求用戶

這是我的員工模型

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) 

代碼我做了一些員工類別像老師,圖書管理員

我的邏輯是基於在POST請求的時間範疇。 說明employee_category是否爲1.然後檢查圖書館管理組並將該組添加到請求用戶,或者如果employee_category是2,則檢查圖書館管理組並將該組添加到請求用戶。

這是我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) 

我已經refered這些鏈接here代碼。 我能夠保存用戶,但我仍然無法將用戶組添加到用戶(不反映在用戶模型上)。

任何人都知道解決方案,請幫助。先謝謝你。

+0

我使用完全相同的代碼,因爲超過一年,它的工作。檢查調試器在添加和保存之前和之後發生了什麼 –

+0

無論如何,您可以考慮在模型級別使用觸發器,而不是在每次請求時更新它。我們正在使用一種類似於名爲role的m2m關係,並且我們使用一種函數來更新用戶,無論用戶或角色何時更新: 'm2m_changed.connect(update_groups,sender = MISUser.role.through)' '@receiver( m2m_changed,sender = Role.groups.through)' 'def update_all_users(sender,** kwargs):' –

+0

我試過調試過。當我將employee_category值設置爲2.它涉及到Tescher Management組條件檢查。並且request.user.save()也被調用。但仍然沒有效果。 –

回答

0

經過大量研究,我找到了答案。

當我使用此代碼。

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

該組僅在具有管理員權限的用戶沒有「EmployeeAdmission」實例時才被保存。因此,要獲得「EmployeeAdmission」的實例,我是這樣做的。

employee = serializer.save() 

獲得該模型的實例後,我能夠保存它。它反映在數據庫中。

我使用的代碼是這樣的

employee.groups.add(library_group) 
employee.save() 
相關問題