**check_list
我们在前端可能有多个下拉框之类的查询条件
但
遇到这些查询我们能直接写查询语句吗?可以,但要将每一种情况都考虑到并且不断判断过于复杂繁琐。
在遇到这个问题时,我在思考:
但如何从字典中取出查询条件加入filter语句呢?如果查询时遇到类似双下划线查询或者多表查询怎么办?
在遇到我们自己不能解决的问题,最通常的办法可能就是百度了。
是的,我取百度了,结果让我很惊喜,确实有相关方法
# 获取动态过滤调价
def getKwargs(data={}):
kwargs = {}
kwargs['state'] = True
for (k , v) in data.items() :
if v is not None and v != u'' :
kwargs[k] = v
return kwargs
searchCondition = {'name__icontains' : name ,....}
kwargs = utils.getKwargs(searchCondition)
model_set = Model.objects.filter(**kwargs)
看到这里是不是很惊喜,多简单啊,这就完了
呵呵,事实告诉我高兴的太早了!
为什么呢,找不到utils从哪导入的啊,这就相当于买好电影票却找不到电影院了,极其难受。半天百度无果后,果断放弃。
但这不是无用功
最起码让我肯定了字典的方式可以进行filter过滤查询
需要注意的是:要将字典的key设为在filter中的key,值为匹配的值
最后是一个惊喜的环节,无意中拿**check_dict
试了一下,成功了!!!
所以结果就是filter可以用字典参数来作为查询条件
"""字典示例
check_list为最终的字典
"""
check_dict = {}
"""双下划线查询
"""
check_dict["education__lte"] = 值
check_dict["time__gte"] = 值
check_dict["pay__in"] = 值
check_dict["job_skill__icontains"] = 值
"""多表查询
"""
check_dict["j_company__c_staff"] = 值
"""查询语句
"""
job_obj = Model.objects.filter(**check_dict).all()