2016-07-20 22 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

相关问题