Вы пытались добавить поле 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"
И так далее, просто возвращая разные строки для каждого поискового индекса. Вы также можете создать миксин и вернуть название модели, возвращенное get_model
.
Предполагая, что вы добавили это поле в каждое из ваших SearchIndex
определений, просто связывайте facet
метод с вашими результатами.
results = form.search().facet('facet_model_name')
Теперь метод facet_counts
будет возвращать словарь с гранеными полями и количеством результатов для каждого значения фасета, в данном случае имен моделей.
Обратите внимание, что поле здесь помечено многословно, чтобы избежать возможного конфликта с model_name
, полем, добавленным Haystack. Он не граненый, и я не уверен, что его дублирование вызовет конфликт.