当代码中有超过20个组时,我在下面显示了2个组的示例。如果有请求提供建议,我不确定是否有更好的方法可以解决这个问题。
下面我要检查学生是否拥有“所有群组”'对于他们的学生小组,如果他们这样做,我希望小组为无。这部分工作正常,与其他人一样。
allgroups = 'All Groups'
# if user has all groups then no group will show
if allgroups in studentgroup:
bhstudentgrouplist = None
abstudentgrouplist = None
else:
bhstudentgrouplist = Groups.objects.filter(~Q(group_id__in=
groupIds)).filter(group_id = 2000)
abstudentgrouplist = Groups.objects.filter(~Q(group_id__in=
groupIds)).filter(group_id = 5000)
如果用户拥有该组中的所有项目,他们应该被标记为“无”,这样他们就不会发生什么事情。显示在我的模板中。为此,我尝试了以下方法:
1
if not bhstudentgrouplist.exists():
bhstudentgrouplist = None
if not abstudentgrouplist.exists():
abstudentgrouplist = None
2
if bhstudentgrouplist.count() < 1:
bhstudentgrouplist = None
if not abstudentgrouplist.count() < 1:
abstudentgrouplist = None
3
if bhstudentgrouplist.isnull():
bhstudentgrouplist = None
if not abstudentgrouplist.isnull():
abstudentgrouplist = None
这适用于实例,除非学生拥有All Groups,我得到的错误不能在None类型上使用函数isnull(),count(),exists()。当小组属于所有小组并且学生已经拥有学生组中的所有报告时,如何将其设置为无?如果有更好的方法来完成整个过程,请指导我朝这个方向发展。
该过程正在检查学生是否拥有所有群组,如果他们不提供可用报告列表。有时用户已经拥有这些实例中的所有可用报告,报告组应设置为无,因此它不会返回可用报告。
答案 0 :(得分:1)
不应将bhstudentgrouplist设置为None,而应将其设置为空查询集。然后它仍然可以访问查询集函数
X-Forwarded-Host
然后查询成员函数,例如 if allgroups in studentgroup:
bhstudentgrouplist = Groups.objects.none()
abstudentgrouplist = Groups.objects.none()
else:
b...
工作,虽然我不确定isnull()
答案 1 :(得分:0)
我仍然不确定最终目标,但我至少可以解决你所得到的错误。如果在每个if语句之前添加对变量的检查,如下所示:
if bhstudentgrouplist and not bhstudentgrouplist.exists():
这样,如果其中一个变量是None
,则在尝试调用函数之前语句将失败。根据您的确切用例,您可以将其简化为仅检查变量:
if bhstudentgrounplist:
或
if not bhstudentgrouplist:
因为空列表将评估为false
。
还需要考虑的另一件事是将数据存储在字典中。您当前的变量名称可以是键,列表可以是值。这样,您可以直接遍历它,而不是明确地为20个组编写每个检查。