用于检查无类型上是否存在查询集的逻辑?

时间:2018-03-13 17:33:47

标签: python

当代码中有超过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()。当小组属于所有小组并且学生已经拥有学生组中的所有报告时,如何将其设置为无?如果有更好的方法来完成整个过程,请指导我朝这个方向发展。

该过程正在检查学生是否拥有所有群组,如果他们不提供可用报告列表。有时用户已经拥有这些实例中的所有可用报告,报告组应设置为无,因此它不会返回可用报告。

2 个答案:

答案 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个组编写每个检查。