姜戈干草垛。和,或在搜索查询集中
Django Haystack. And, or in search queryset
使用:Haystack 和 Sorl。
我需要制作一个搜索查询集以通过过滤器搜索产品。
首先,我只需要根据我的站点(Django 站点框架)过滤产品。所以我这样做:
sqs = sqs.filter(site=site.pk)
它returns这样的搜索查询:
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))
那么,如何做到这一点?
请帮助我
像 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))
)
使用:Haystack 和 Sorl。
我需要制作一个搜索查询集以通过过滤器搜索产品。
首先,我只需要根据我的站点(Django 站点框架)过滤产品。所以我这样做:
sqs = sqs.filter(site=site.pk)
它returns这样的搜索查询:
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))
那么,如何做到这一点? 请帮助我
像 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))
)