在Django中搜索表的所有字段
如何在Django中使用过滤条件搜索表中的所有字段,比如:table.object.filter(表中的任意字段="某个值")
谢谢。
3 个回答
2
编辑:刚注意到这个功能只适用于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>]
4
我觉得过滤条件不太适合这种搜索方式。你可以看看Haystack这个工具。
20
我同意Alasdair的看法,不过你问题的答案是这样的:
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)
注意:我没有测试过这段代码,但它应该能让你离目标更近一些。