2016-07-20 43 views
0

我最近推出了一個簡單的搜索到我正在處理的Django應用程序。搜索過濾器下面的模型的索引:使用多個字段進行搜索Django(構建對象列表)

class Task(models.Model): 
    task_name = models.CharField(max_length=140) 
    task_description = models.TextField() 
    category = models.CharField(max_length=140) 

並執行如下:

查看:

def ViewAllTasks(request): 

    if 'q' in request.GET and request.GET['q']: 
     q = request.GET['q'] 
     tasks_list = task.objects.filter(task_name__contains=q) 
    else: 
     tasks_list = task.objects.all().order_by("task_name") 

模板/ HTML:

<div class="col-lg-2"> 
     <form action="/tasks" method="get"> 
      <input type="text" name="q"> 
      <input type="submit" value="Search"> 
     </form> 
    </div> 

目前這個搜索在任務名稱上並返回所有任務,如果沒有搜索到任何東西。但是,我想擴展搜索範圍,以便在描述和類別中進行搜索,並且無法嘗試在多個對象上定義過濾器。我已經嘗試了包括以下內容的所有內容:

tasks_list = task.objects.filter(~Q(task_name__contains=q) + ~Q(task_description__contains=q) + ~Q(category__contains=q)) 

我想在此處找到重疊部分。

回答

1

而不是使用+使用|

如果你想你的地方在TASK_NAME,TASK_DESCRIPTION和類別不包含 Q(Q是案件敏感

tasks_list = Task.objects.filter(~Q(task_name__contains=q) | ~Q(task_description__contains=q) | ~Q(category__contains=q)) 

列表如果你想你的列表,其中的在TASK_NAME,TASK_DESCRIPTION和類別不包含 q(q是不區分大小寫)

tasks_list = Task.objects.filter(~Q(task_name__icontains=q) | ~Q(task_description__icontains=q) | ~Q(category__icontains=q)) 

如果你想喲u得到其中的TASK_NAME,TASK_DESCRIPTION和類別包含 Q(Q是情況敏感)名單

tasks_list = Task.objects.filter(Q(task_name__contains=q) | Q(task_description__contains=q) | Q(category__contains=q)) 

如果你想你在的TASK_NAME,TASK_DESCRIPTION和類別包含 Q中的列表(q是殼體不敏感

tasks_list = Task.objects.filter(Q(task_name__icontains=q) | Q(task_description__icontains=q) | Q(category__icontains=q)) 

|用於OR

&用於和

+0

真是個好的答案!謝謝! – NickP

相關問題