Django查询集过滤,如何过滤动态列表上的数据

Django query set filtering, how to filter data on dynamic list

我在后端使用 django 1.10 和 mongodb。 mongodb 我使用的是 mongoengine 0.11。 在 mongodb 中,我有一个名为 "test_coll" 的集合,其中包含字段 "name"、"dept" 和 "tag"。收集的示例数据如下-

name    dept    tag
peter   dev     k1
mark    tester  k1
sachin  dev     k1
amit    manager k1

我正在提供列表

dept_list=['dev','tester']

此列表是动态的。

下面是函数的代码

from mongoengine import Q
dept_list=['dev','tester']
output_list = []
query_dept objects = Q()
    for dl in dept_list:
        query_objects |= Q(dept__iexact=dl)            
    for details in test_coll.objects.filter(((Q(tag__iexact='k1')) & query_objects )):
       output_list.append({'name':details.name,'dept':details.dept,'tag':details.tag})
return output_list

根据上面提供的列表 dept_list=['dev','tester'] 和示例数据,我从集合中获取详细信息,其中标签为 'k1',部门为 'dev'、'tester'.

所以我被困在,如果我提供,dept_list=[''] 包含空字符串,那么它应该 return 标签='k1' 的所有数据。在我的例子中,它没有 returning 任何东西。 任何人都可以提供解决方案。提前致谢。

'' 是 dept_list 中的一项:这并不意味着 它是一个空列表 。空列表是 []。因此,您应该在检查列表是否有该项目的地方设置一个条件,不要进行过滤,因为没有任何 dept 的值为 ''。或者,如果列表中有该项目,则将其弹出。

实际上,您的 SQL 查询看起来像:SELECT * FROM test_coll WHERE tag="k1" AND dept="";。进行我刚刚评论的更改会变成 SELECT * FROM test_coll WHERE tag="k1";.

所以当 dept_list = [''] 那么 我不得不从列表中删除空字符串 dept_list = filter(lambda item: item != '', dept_list)

修改后的代码为-

from mongoengine import Q
dept_list=['']
query_dept objects = Q()
for dl in dept_list:
    query_objects |= Q(dept__iexact=dl)            
for details in test_coll.objects.filter(((Q(tag__iexact='k1')) & query_objects )):
   output_list.append({'name':details.name,'dept':details.dept,'tag':details.tag})
return output_list

所以这给出了预期的输出。