2016-01-24 70 views
1

如何查询数据库中的Django包含多个关键字搜索功能的Django项目实施

我有具有类这样

class Job(models.Model): 
title = models.CharField(max_length=100) 

我想查询jobs_job数据库实现一个工作模型搜索功能使得

def search(request): 
if request.method == "GET": 
    search_terms = request.GET['title'] 
    search_terms = search_terms.split(',') 

    jobs = Job.objects.filter(title__contains=search_terms[0]) 

问题是我只能一项传递给contains方法,

我搜索使用多个单词的作业模式标题怎么办属性

回答

1

例如,你可以做

from django.db.models import Q 

def search(request): 
    if request.method == "GET": 
     search_terms = request.GET['title'] 
     search_terms = search_terms.split(',') 
     #get rid of duplicates 
     search_terms = set(search_terms) 
     queryargs = [Q(title__contains=i) for i in search_terms] 
     jobs = Job.objects.filter(*queryargs) 
+0

好吧,看起来很酷 – shining

+0

请参阅我的编辑,我已经使用了你的变量名称并根据你的分隔符清理了一些东西',' – Pynchia

1

使用django.db.models.Q对象。就像这样:

from django.db.models import Q 

def search(request): 
    if request.method == "GET": 
     search_terms = request.GET['title'] 
     search_filter = Q() 
     for term in search_terms.split(','): 
      search_filter |= Q(title__contains=term) 

     jobs = Job.objects.filter(search_filter) 

这将搜索任何条款(OR)的,要搜索的所有术语(AND)使用search_filter &= Q(title__contains=term)代替。