如何使用filter子句搜索django中表中的所有字段 例如:table.object.filter(表中的任何字段=“sumthing”)
感谢。
答案 0 :(得分:11)
我同意阿拉斯戴尔的观点,但问题的答案是:
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 :(得分:4)
我不认为filter子句适合这种搜索。您可能需要查看Haystack。
答案 2 :(得分:1)
编辑:刚刚注意到这仅限于Postgres
古老的问题,但需要进一步参考:
显然在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>]