如果列表中重叠,则Queryset过滤器

时间:2014-12-07 20:13:50

标签: python django django-haystack

我的索引中有一个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。有没有办法编写一个查询集来检查两个列表之间是否存在任何交集?

1 个答案:

答案 0 :(得分:0)

简单' in'过滤器完成了这项工作......我觉得这让我感到很难过。

sqs = sqs.filter(specialties__in=self.cleaned_data['specialties'])