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(字典)
注意:這里的字典要加上**,進行解包
