我最近推出了一个简单的搜索到我正在处理的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))
我想在这里抓住重叠。
答案 0 :(得分:2)
而不是使用+ use |
如果您希望获得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))
如果您希望获得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
&安培;用于AND