【发布时间】:2016-06-20 06:19:39
【问题描述】:
我有一个名为 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。 我能够保存用户,但我仍然无法将组添加到用户(不反映在用户模型上)。
任何知道解决方案的人请帮忙。提前谢谢你。
【问题讨论】:
-
一年多以来我一直在使用完全相同的代码,它确实有效。检查调试器在添加和保存之前和之后发生了什么
-
无论如何,您可以考虑在模型级别使用触发器,而不是在每次请求时更新它。我们正在使用与名为角色的 m2m 关系类似的东西,并且我们正在使用一个函数来在用户或角色更新时更新用户:
m2m_changed.connect(update_groups, sender=MISUser.role.through)@receiver(m2m_changed, sender=Role.groups.through)def update_all_users(sender, **kwargs): -
我试过调试。当我将employee_category 值设置为2 时,它涉及到Tescher Management 组条件检查。并且 request.user.save() 也被调用。但仍然没有效果。
-
您是否在每一步都打印了 request.user.groups?它们的价值是什么?在 save() 之后立即设置断点并直接检查数据库。新组在吗?您的应用程序的任何其他部分是否更改了组? (在您的代码中搜索 user.groups)
标签: django django-rest-framework django-users