2009-12-08 84 views
3

表中的所有领域如何搜索所有字段的表中使用筛选子句 前的Django:table.object.filter搜索在Django

感谢(表=“sumthing”任何领域)。

回答

9

我同意阿拉斯代尔,但回答你的问题是这样的,但:

from django.db.models import CharField 
from django.db.models import Q 

fields = [f for f in table._meta.fields if isinstance(f, CharField)] 
queries = [Q(**{f.name: SEARCH_TERM}) for f in fields] 

qs = Q() 
for query in queries: 
    qs = qs | query 

table.objects.filter(qs) 

注:我没有测试此代码,但它应该让你颇有几分接近你的目标

+1

谢谢............................... – Hulk 2009-12-08 16:47:30

+3

也许接受一个答案?大声笑 – Jiaaro 2009-12-08 17:01:42

+0

这太棒了!谢谢。 我试图让这个工作与“LIKE”SQL比较,有没有办法做到这一点? – 2017-03-17 10:01:13

4

我不认为过滤条款适合这种搜索。您可能想要查看Haystack

+0

+1的草垛 - 实际执行它现在。 – 2009-12-08 14:36:33

+1

+1,它确实看起来像一个全文搜索机制的工作。 – cethegeek 2009-12-08 15:02:19

+0

你拿出你放的东西 – yekta 2018-02-28 21:35:08

1

编辑:只注意到这仅限于Postgres的

古老的问题,但对于进一步的参考:

显然在Django 1.10 SearchVector班增加了。从文档

用法:

搜索针对单个场是伟大的,而是限制。我们正在搜索的Entry实例属于一个博客,它有一个标语栏。对查询两个字段,使用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>]