2012-08-13 102 views
6

有没有一种方法只将模型的过滤部分作为SeachQuerySet?Django Haystack - 搜索非索引许多字段

喜欢的东西:。

查询= SearchQuerySet()模型(Entry.filter(categories__name = '东西'))

,而不是

查询= SearchQuerySet()模型(项)

我想过滤的字段是一个manytomany字段和非索引。

回答

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)