Django Haystack在模型类型上的分面

asa*_*ams 5 facet django-haystack

我想基于返回的不同model_names(类)来面对结果.是否有捷径可寻?

Ben*_*tin 5

您是否尝试SearchIndex使用此信息添加字段?例如

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"
Run Code Online (Sandbox Code Playgroud)

依此类推,只需为每个搜索索引返回一个不同的字符串.您还可以创建一个mixin并返回由其返回的模型的名称get_model.

假设您已将此字段添加到每个SearchIndex定义中,只需facet方法链接到结果即可.

results = form.search().facet('facet_model_name')
Run Code Online (Sandbox Code Playgroud)

现在,该facet_counts方法将返回一个字典,其中包含分面字段和每个构面值的结果计数,在本例中为模型名称.

请注意,此处的字段标记为详细,以避免可能与model_nameHaystack添加的字段冲突.它不是刻面的,我不确定重复它是否会导致冲突.