python - 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 组等自动完成。也许我做错了什么?知道下一步该怎么做吗?谢谢
解决方案
在管理面板中,我分别创建了 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)
推荐阅读
- r - 聚合 R 数据框中的两列
- javascript - TypeScript - 嵌套地图类型设计
- python - 如何根据多列和条件填充 pandas DataFrame?
- http - 如何将 http::HeaderMap 序列化为 JSON?
- c# - 有没有办法为默认模型绑定错误构建自定义错误消息,想要摆脱消息中的行和位置
- python-3.x - 找到最小数量的笔记来赚一笔
- julia - 结构数组字段上的广播运算符(Julia)
- r - 当相对误差不断下降时,如何修剪和使用复杂度参数(cp)?
- python - 如何在 Keras 中实现 Salt&Pepper 层?
- angular - 如何使用带有 idphint 属性的 angular keycloak 配置?