我想根据返回的不同model_names(类)来研究结果。有一个简单的方法吗?
答案 0 :(得分:5)
您是否尝试使用此信息添加SearchIndex
字段? E.g。
class NoteIndex(SearchIndex, indexes.Indexable):
title = CharField(model_attr='title')
facet_model_name = CharField(faceted=True)
def get_model(self):
return Note
def prepare_facet_model_name(self, obj):
return "note"
class MemoIndex(SearchIndex, indexes.Indexable):
title = CharField(model_attr='title')
facet_model_name = CharField(faceted=True)
def get_model(self):
return Memo
def prepare_facet_model_name(self, obj):
return "memo"
依此类推,只需为每个搜索索引返回一个不同的字符串。您也可以创建一个mixin并返回get_model
返回的模型的名称。
假设您已将此字段添加到每个SearchIndex
定义中,只有chain the facet
method添加到您的结果中。
results = form.search().facet('facet_model_name')
现在facet_counts
方法将返回一个字典,其中包含分面字段和每个构面值的结果计数,在本例中为模型名称。
请注意,此处的字段大致标记,以避免与Haystack添加的字段model_name
发生冲突。它不是刻面的,我不确定重复它是否会引起冲突。
答案 1 :(得分:0)
here为此做了很好的演练。
您需要的最低限度:
faceted=True
添加到model_names
字段的参数中。.facet('model_names')
添加到您想要的任何SearchQuerySet中。对该问题的更多解释将能够得到更完整的答案。
答案 2 :(得分:0)
如果您只想过滤模型类型,可以使用ModelSearchForm