Django中的多条件多表匹配查询**kwargs

Django中的多匹配查询


**check_list

1. 问题


我们在前端可能有多个下拉框之类的查询条件

  • 下拉框的条件并不一定全选check_list
  • 下拉框的数量可能很多
  • 配合别的条件进行查询时
  • 等等

遇到这些查询我们能直接写查询语句吗?可以,但要将每一种情况都考虑到并且不断判断过于复杂繁琐。


2. 思考过程


在遇到这个问题时,我在思考:

  • 对传过来的条件进行判断
  • 将有效的查询条件放进字典

但如何从字典中取出查询条件加入filter语句呢?如果查询时遇到类似双下划线查询或者多表查询怎么办?


3. 解决过程


在遇到我们自己不能解决的问题,最通常的办法可能就是百度了。

是的,我取百度了,结果让我很惊喜,确实有相关方法

# 获取动态过滤调价
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可以用字典参数来作为查询条件


4. 最终结果


"""字典示例
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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值