我创建了一个表单,由于隔离要求,我需要阻止某些用户看到某些结果。
表单完美无缺,但我想应用一个过滤器来查看.section{
width : 100%;
border-bottom: 2px solid #ccc;
margin-top : 5px;
}
的组,并根据用户所属的组过滤表单内容。
views.py,使用过滤器呈现表单。
user
这是检查用户是否属于某个组的过滤器。
def Overtime_Results(request):
employeeGroup = request.user.groups.get(name='Client1' or 'Client2' or 'Client3' or 'Client4')
overtime_data = Overtime.objects.filter(client=employeeGroup)
location = None
if request.method == 'POST':
form = OvertimeForm(data=request.POST)
if form.is_valid():
location = form.data['location']
overtimeid = Location.objects.all()
overtime_data = Overtime.objects.filter(location=location, client=employeeGroup)
else:
form = OvertimeForm()
template_name = "overtime/Overtime_Results.html"
context = {
'form': form,
'location': location,
'overtime_data': overtime_data,
}
return render(request, template_name, context)
我基本上希望这能够返回用户所属的组,随后将其应用于表单过滤器。
我已经尝试了两种过滤器,使用多种方法。以上工作原理,但仅适用于Client1。 Client2和后续客户端无法正常工作。
编辑:我想我需要使用等同于' in' SQL中的语句。但是,我似乎无法弄清楚如何做到这一点。
我现在收到的错误是:
employeeGroup = request.user.groups.get(name='Client1' or 'Client2' or 'Client3' or 'Client4')
使用分配了与查询结果匹配的有效组的用户访问页面时。
答案 0 :(得分:1)
这个QuerySet API Field Lookups using "in"怎么样。
request.user.groups.get(name__in=['Client1' ,'Client2' , 'Client3' , 'Client4'])
答案 1 :(得分:0)
您的查询归结为:
request.user.groups.get(name='Client1')
这是因为:
的结果'Client1' or 'Client2' or 'Client3' or 'Client4'
永远是'Client1'
。
如果您只想获取当前用户所属的所有组:
user_groups = request.user.group_set.all()
如果您的用户只能属于一个组,请使用:
user_group = request.user.group