在江中搜索多个字段

2024-03-29 09:45:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个搜索系统,我希望通过django模型中的多个字段进行搜索。我写了下面的代码,但我一直不知道如何去做。

型号:

class Finhall(models.Model):
     user=models.ForeignKey(User)
     name=models.CharField(max_length=250, unique=True)
     address=models.CharField(max_length=200)
     city=models.CharField(max_length=200)
     state=models.CharField(max_length=200)

     def __unicode__(self):
         return u'%s' % (self.name)

视图.py

def hup_find(request):
    if ('q' in request.GET) and request.GET['q'].strip():
        query_string=request.GET.get('q')
        seens=Finhall.objects.filter(name__icontains=query_string)
    else:
        seens=None
    return render_to_response('find.html',{'seens':seens},context_instance=RequestContext(request))

模板:

 {% block content %}
     <body>
    <form action="" method="GET">
    <input type="text" name="q" />
    <button type="submit">search</button>
   </form>


    {% for seen in seens %}

    <p> {{seen.name}}</p>

    {% empty %}

      <p> no search </p>
    {% endfor %}

 </body>

   {% endblock %}

我该怎么办?由于个人原因,我不想用海萨克。


Tags: nameinselfgetreturnmodelsrequestdef
3条回答

您可以使用django ^{}对象执行OR查询

或者,如果您想AND一起查询,只需将当前查找用作kwargs

seens = Finhall.objects.filter(
  name__icontains=query_string, 
  address__icontains=query_string
)

您真的应该考虑全文搜索或haystack(这使搜索变得容易),因为icontains发出的%LIKE%是不可远程扩展的

要在多个字段中搜索同一文本,可以使用以下命令:

from django.db.models import Q

class SearchAPI(APIView):
    def get(self, request, search_text, format=None, **kwargs):
        Model.objects.filter(Q(search_tags__contains=search_text) | Q(auto_tags__contains=search_text)

编辑:刚刚注意到这是只写博士后的

显然在django 1.10SearchVector类中添加了。

文档中的用法:

Searching against a single field is great but rather limiting. The Entry instances we’re searching belong to a Blog, which has a tagline field. To query against both fields, use a SearchVector:

>>> from django.contrib.postgres.search import SearchVector
>>> Entry.objects.annotate(
...     search=SearchVector('body_text', 'blog__tagline'),
... ).filter(search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

相关问题 更多 >