Python 在Django中搜索多个字段
我正在尝试建立一个搜索系统,我想在我的django模型中通过多个字段进行搜索。我写了下面的代码,但我一直不知道该怎么做 型号:Python 在Django中搜索多个字段,python,django,django-views,Python,Django,Django Views,我正在尝试建立一个搜索系统,我想在我的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.Char
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)
Views.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 %}
{%block content%}
搜索
{在seens%中看到的百分比}
{{seen.name}
{%empty%}
禁止搜索
{%endfor%}
{%endblock%}
我该怎么办?由于某些个人原因,我不想使用haysatck。您可以使用django对象执行或
查询
或者,如果您想同时使用和查询,只需将当前查找用作KWARG即可
seens = Finhall.objects.filter(
name__icontains=query_string,
address__icontains=query_string
)
您应该真正考虑全文搜索或<代码> HasDACK (这使得搜索变得容易),因为<代码> ICONDENCE < /代码>发布了<%> %> %这不是可远程可扩展的
< P>编辑:只是注意到它只是P<
显然,在django中添加了1.10类
文档中的用法:
针对单个领域进行搜索是很好的,但相当有限。我们正在搜索的条目实例属于一个博客,它有一个标语字段。要查询这两个字段,请使用SearchVector:
>>来自django.contrib.postgres.search导入SearchVector
>>>Entry.objects.annotate(
…search=SearchVector('body\u text','blog\u tagline'),
…).filter(search='Cheese')
[, ]
要在多个字段中搜索同一文本,可以使用以下方法:
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)
正如所建议的,如果您使用的是postgres db,那么可以使用SearchVector(我只是直截了当地回答这个问题,请在中获取完整的详细信息)
首先将django.contrib.postgres
添加到已安装的应用程序中,有助于利用PostgreSQL的全文搜索引擎
在搜索的views.py中
来自django.contrib.postgres.search导入SearchVector
#视图功能
def hup_查找(请求):
search\u vector=SearchVector('name','state','city'))
if('q'在request.GET中)和request.GET['q'].strip():
query\u string=request.GET['q']
seens=Findhall.objects.annotate(
搜索=搜索向量).filter(搜索=查询字符串)
返回呈现(请求'find.html',{'seens':seens})
对于大型数据库,搜索过程需要一些时间,您可以使用postgresql的GIN(广义反向索引)功能来提高性能,这些是官方以外的一些有用链接
- 这个
我们发现了不同的方法,我认为用一种更为通俗的方式使用搜索
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)