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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章