【问题标题】:Django Haystack. And, or in search queryset姜戈干草堆。和,或在搜索查询集中
【发布时间】:2017-11-07 13:30:05
【问题描述】:

使用:Haystack 和 Sorl。

我需要创建一个搜索查询集来按过滤器搜索产品。

首先,我只需要根据我的网站(Django 网站框架)过滤产品。所以我这样做:

sqs = sqs.filter(site=site.pk)

它返回这样的搜索查询:

site:(6)

好的。

那我需要按属性过滤:

sqs = sqs.filter(attribute_codes='power', attribute_values__range=(20, 30))
sqs = sqs.filter(attribute_codes='power', attribute_values__range=(40, 50))

它会生成这样的查询:

(site:(6) AND attribute_codes:(power) AND attribute_values:(["20" TO "30"]) AND attribute_values:(["40" TO "50"]))

但是,我需要这样查询:

(site=6) AND ((attributes1) OR (attributes2))

所以我尝试将按属性过滤更改为filter_or

 sqs = sqs.filter_or(attribute_codes='power', attribute_values__range=(20, 30))
sqs = sqs.filter_or(attribute_codes='power', attribute_values__range=(40, 50))

结果是:

(site:(6) OR (attribute_codes:(power) AND attribute_values:(["20" TO "30"])) OR (attribute_codes:(power) AND attribute_values:(["40" TO "50"])))

但我还需要其他:

    (site=6) AND ((attributes1) OR (attributes2))

那么,如何做到这一点? 请帮帮我

【问题讨论】:

    标签: python django search django-haystack pysolr


    【解决方案1】:

    与 Django 的查询集 Q 对象一样,django haystack 有一个 SQ 对象,它允许在过滤中使用 |& 运算符

    sqs = sqs.filter(site=6)
    sqs = sqs.filter(SQ(attribute_codes='power') | SQ(attribute_values__range=(20, 30))
    

    sqs = sqs.filter(
        SQ(site=6) & (SQ(attribute_codes='power') | SQ(attribute_values__range=(20, 30))
    )
    

    【讨论】:

    • 非常感谢您的帮助
    猜你喜欢
    • 2012-05-22
    • 2012-03-19
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多