搜索django中表格中的所有字段

时间:2009-12-08 13:04:18

标签: python django

如何使用filter子句搜索django中表中的所有字段 例如:table.object.filter(表中的任何字段=“sumthing”)

感谢。

3 个答案:

答案 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>]