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
所以这给出了预期的输出。
我在后端使用 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
所以这给出了预期的输出。