6

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

就像是:

查询 = SearchQuerySet().models(Entry.filter(categories__name='something'))

代替

查询 = SearchQuerySet().models(Entry)

我要过滤的字段是多对多字段且未编入索引。

4

1 回答 1

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)
于 2012-08-13T11:58:45.483 回答