1. 程式人生 > 實用技巧 >Q查詢的高階用法

Q查詢的高階用法

示例:如前端需要通過下拉框選擇需要通過什麼過濾欄位來查詢輸入的關鍵字,後端如何使用Q查詢過濾包含輸入的關鍵字呢?

def customers(request):
    search_field = request.GET.get('search_field') #選擇查詢的欄位
    kw = request.GET.get('kw') # 搜尋關鍵字
    if kw:
        # 根據傳過來的關鍵字搜尋過濾出總資料 用**打散的方式,因為search_field不是關鍵字
        # 此時過濾的還不是包含關鍵字的,需要在前端下拉選項中設定value的值為qq__contains這種寫法
        # 方式一 使用**打散
        customer_list = models.Customer.objects.filter(**{search_field:kw}) # 打散後形式 qq__contains=小明  
        # 方式二 
        q_obj = Q() # 生成Q物件
        # q_obj.connector = 'or' # 指定Q查詢的連線符,預設不寫就是and
        q_obj.children.append((search_field,kw))  # 傳入元組形式的資料 and關係  Q(qq__contains='xx')&Q(name__contains='小明')
        customer_list = models.Customer.objects.filter(q_obj)  #直接將Q物件傳入過濾條件中
        .....
        return render(request, 'customers.html')