首页 > 解决方案 > Django添加自定义权限

问题描述

我面临在 Django 中添加自定义权限的问题。我的想法是,授权用户时,如果属于group1,则只显示group1的行,否则显示group2的行。数据库表中有一个 group 字段,它只包含 group1 和 group2 两个值。在管理面板中,我分别创建了 2 个组,并将用户包括在这些组中。我还创建了权限并将它们分配给每个用户。

我的模型.py

class Employee(models.Model):
   DEPT =(
    ('Group1', 'Group1'),
    ('Group2', 'Group2')
   )

   dept = models.CharField(max_length=100, choices=DEPT, default='')
   fio = models.CharField(max_length = 100)
   work_place = models.CharField(max_length = 150, default= '')

def __str__(self):
    return self.fio

class Meta:
    permissions = (
                   ("view_museum", "can view museum"),
                   ("view_ssoismi", "can view ssoismi"),
                  )

我的观点.py

def employee_list(request):
   context = {'employee_list': Employee.objects.all()}
   return render(request, "employee_register/employee_list.html", context)

如果我将上下文行更改为

context = {'employee_list': Employee.objects.filter(dept="Group1")}

我得到了想要的结果,但是如何使用 django 组等自动完成。也许我做错了什么?知道下一步该怎么做吗?谢谢

标签: pythondjango

解决方案


在管理面板中,我分别创建了 2 个组,并将用户包括在这些组中。

通过过滤request.user.groups来查询这些组名name__in。然后使用 过滤Employee.objects这些结果dept__in

请注意,这假定管理员组名称的命名与Employee.dept字段完全相同。如果不是,请重命名管理员组以匹配该Employee.dept字段(包括大小写、空格等)。

def employee_list(request):
    groups = [g.name for g in request.user.groups.filter(name__in=['Group1', 'Group2')]
    context = {'employee_list': Employee.objects.filter(dept__in=groups)}

    return render(request, 'employee_register/employee_list.html', context)

推荐阅读