2017-03-08 78 views
0

我使用Django 1.10和MongoDB在后端的过滤数据。对于mongodb,我使用的是mongoengine 0.11。 在MongoDB中,我已经收集名为“test_coll”,其中包含字段“姓名”,“部门”和“标签”。从采集的样本数据是作为后续Django的查询中设置过滤,如何动态列表

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”和部门的“开发”,“测试”的详细信息。

所以我停留在,如果我提供,dept_list=['']包含空字符串,那么它应该返回所有的数据,其中标签=“K1”。在我的情况下,它不会返回任何东西。 任何人都可以提供解决方案。提前致谢。

回答

0

所以当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 

所以这给预期的输出。

0

''是dept_list中的一项:它并不意味着它是一个空的列表。一个空的列表是[]。因此,如果您检查列表中是否包含该项目,请勿过滤,因为您没有任何dept的值为''。或者如果列表中有该项目,请将其弹出。

其实,你的SQL查询看起来像这样:SELECT * FROM test_coll WHERE tag="k1" AND dept="";。做出改变,我刚刚评论它会变成SELECT * FROM test_coll WHERE tag="k1";

+0

是的。我已经想通了。感谢帮助。 :) – sachin27