我的索引中有一个MultiValueField,其中包含给定提供者的专业列表。在我的搜索中,我希望允许用户选择要筛选的专业,筛选出与所选专业至少不匹配的任何提供者。基本上我希望所有与所选过滤器有特殊重叠的供应商。
例如:如果:
Guido专注于Python,C和Unix
James擅长Java,Unix和编译器
Bill专门研究Windows和C
我选择过滤器Python和Windows,我想看看Guido和Bill。 如果我选择过滤器C和编译器,我想看看Guido,James和Bill。等等。
这是我的search_indexes.py
class ProviderIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
specialties = indexes.MultiValueField(model_attr='specialties_as_list')
我的表格已经
了specialities = forms.MultipleChoiceField(widget=CheckboxSelectMultiple(), choices=Provider.SPECIALTY_CHOICES)
作为专业领域。
编辑
对于不熟悉Haystack的人来说,查询的工作原理与django ORM基本相同,所以你仍然可以提供帮助! MultiValueField作为json字符串数组存储在索引中,本质上是一个Python List。有没有办法编写一个查询集来检查两个列表之间是否存在任何交集?
答案 0 :(得分:0)
简单' in'过滤器完成了这项工作......我觉得这让我感到很难过。
sqs = sqs.filter(specialties__in=self.cleaned_data['specialties'])