使用objects.get或objects.filter获取要在表单过滤器中使用的特定组

时间:2016-01-17 05:12:53

标签: python django

我创建了一个表单,由于隔离要求,我需要阻止某些用户看到某些结果。

表单完美无缺,但我想应用一个过滤器来查看.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')

使用分配了与查询结果匹配的有效组的用户访问页面时。

2 个答案:

答案 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