【问题标题】:Search in Django and GET with multiple words在 Django 和 GET 中搜索多个单词
【发布时间】:2011-09-05 03:20:17
【问题描述】:

如果我想做这样的事情,你能告诉我应该使用什么或在哪里看:当有人在搜索字段中输入“aaa bbb”(?t=aaa+bbb) 时,它只会找到那些模型,其中标题字段是“aaa bbb”,但不是“aaa ccc bbb”。例如,如何更改此代码以使其找到所有标题,其中 Titles 是“aaa”或“bbb”字?

if 't' in request.GET:
    search = request.GET['t']

result = somemodel.objects.filter(Title__icontains = search).order_by('-pub_date')

或者在标题中是“aaa”和“bbb”两个词,但不是一个接一个?我应该将“icontains”更改为其他内容吗?或者做一些循环将“aaa bbb”拆分为“aaa”和“bbb”,如果是的话 - 如何?)

【问题讨论】:

    标签: django search views words


    【解决方案1】:

    this 类似,但在空白处拆分 (.split()) 并在 Q 对象中使用适当的字段。

    【讨论】:

    • search = request.GET['t'].split() 这不起作用,或者我可能不知道如何使用它。如果我说的话,在搜索框中输入后什么都找不到。
    • 现在看起来像这样(显然它不起作用) - 第一行:search = request.GET['t'].split() ... 第二行:result = somemodel.objects .filter(Q(Title__icontains = search)|Q(Title__icontains = x) for in search).order_by('-pub_date') ...错误消息是“'Q'对象没有属性'split'”,但我不知道它是否都有有效的语法(不要提及这是否可行:)
    • 您错过了reduce() 电话。
    • 哦,我明白了。现在第二行看起来像这样: result = pub.filter(Q(Nazwa__icontains = sth)|reduce(operator.or_, (Q(Nazwa__icontains = x) for x in sth))) - 错误消息是:'str' object没有属性'or_' - 我怀疑我是否正确编写了这一行,但我不知道错误在哪里(我之前定义了“pub”和“operator”),我这个错误在于第二行的这段: ...sth)|reduce(operator.or_, (Q(Nazwa__icontains = x) for x in sth)))
    • 您使用operator 来存储一个字符串,而它应该是stdlib 中的operator 模块。
    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2016-03-08
    • 2012-05-21
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多