Django Haystack - 搜索非索引的多对多字段

时间:2012-08-13 11:22:41

标签: django many-to-many django-haystack

有没有办法只将模型的过滤部分作为SeachQuerySet?

类似的东西:

query = SearchQuerySet()。models(Entry.filter(categories__name ='something'))

而不是

query = SearchQuerySet()。models(Entry)

我想要过滤的字段是一个很多字段而且没有索引。

1 个答案:

答案 0 :(得分:14)

搜索索引不存储任何关系,因此它是“平坦的”。您只能将类别的ID添加到Entry的索引中(请注意,您必须使用prepare_ - 方法):

class EntryIndex(indexes.SearchIndex, indexes.Indexable):
    # your other fields
    categories = MultiValueField()

    def prepare_categories(self, obj):
        return [category.pk for category in obj.categories.all()]

你可以这样做:

category = Category.objects.get(name='something')
sqs = SearchQuerySet().models(Entry).filter(categories=category.pk)