django 中多條件搜尋
阿新 • • 發佈:2020-09-09
Django中我們一般用orm進行資料的互動操作,單條件搜尋比較方便,那多條件呢?
百度了一下,大部分都是如下圖的解釋(咱也不知道誰抄襲誰的,太可怕了),對我一點用也沒有
吐槽完上面的,我們看看下面的程式碼(models就不晒了,直接上views),多條件查詢一行程式碼就能搞定,我之前還在自己寫if,else進行判斷取值
@login_required def api_case_search(request): """ apicase 搜尋 :param request: :return: """ project = Project.objects.all().filter(flag=1) page = request.GET.get('page') search_data = {} project_id = request.GET.get('project_id') api_name = request.GET.get('api_name') api_url = request.GET.get('api_url') if project_id: search_data['project_id'] = int(project_id) if api_name: search_data['api_name'] = api_name if api_url: search_data['api_url'] = api_url search_data['flag'] = 1 get_all_path = request.get_full_path() if get_all_path: get_all_path = str(get_all_path).split('?')[1] get_all_path = get_all_path.replace("&", "-") log.info("get_all_path:%s" % get_all_path) api_case = ApiCase.objects.filter(**search_data) paginator = Paginator(api_case, 20) try: contacts = paginator.page(page) except PageNotAnInteger: # 如果請求的頁數不是整數,返回第一頁。 contacts = paginator.page(1) except EmptyPage: # 如果請求的頁數不在合法的頁數範圍內,返回結果的最後一頁。 contacts = paginator.page(paginator.num_pages) return render(request, "api/apiIndex.html", locals())
大致思路:通過request獲取對應的值,建立一個空的字典,然後判斷每一個欄位是否為空,如果不為空就新增的字典中(如果需要其他欄位自行新增),然後通過models進行查詢,ApiCase.object.filter(字典)
注意:這裡的字典要加上**,進行解包