我的django应用程序中有一个模型,我想创建一个搜索表单。有没有办法使用相同的搜索字符串一次搜索模型中的所有字段?我已经研究过xapian和solr,但是对于搜索1个模型来说,它们似乎有很多开销。我希望能说出类似的话:
results = Assignment.objects.filter(any_column = search_string)
我意识到可能没有简洁的东西,但现在除了使用搜索应用程序之外我唯一可以选择的方法是分别检查每个字段并将结果连接在一起。
答案 0 :(得分:12)
获得所有field names后,您可以使用Q
objects创建kwarg expansion并使用reduce()
和operator.or_
将其转换为单个查询。< / p>
qgroup = reduce(operator.or_, (Q(**{fieldname: value}) for fieldname in fieldnames))
asgns = Assignment.objects.filter(qgroup)
答案 1 :(得分:0)
老问题,但为了进一步参考,我补充说:
在django 1.10 SearchVector课程中加入了。
来自文档的用法:
针对单个字段进行搜索非常有用,但相当有限。我们正在搜索的Entry实例属于Blog,它有一个标语字段。要查询这两个字段,请使用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>]