Django CMS Haystack 2.0 Search Index
Currently django-cms-search doesn’t support haystack 2.0 yet, so here is my modified version to work on haystack 2.0 based on
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import datetime from haystack import indexes from cms.models.managers import PageManager from cms.models.pagemodel import Page from cms.models.pluginmodel import CMSPlugin class PageIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=False) pub_date = indexes.DateTimeField(model_attr='publication_date', null=True) login_required = indexes.BooleanField(model_attr='login_required') url = indexes.CharField(model_attr='get_absolute_url') title = indexes.CharField(model_attr='get_title') def prepare(self, obj): self.prepared_data = super(PageIndex, self).prepare(obj) plugins = CMSPlugin.objects.filter(placeholder__in=obj.placeholders.all()) text = '' for plugin in plugins: instance, _ = plugin.get_plugin_instance() if hasattr(instance, 'search_fields'): text += ''.join(getattr(instance, field) for field in instance.search_fields) text += obj.get_meta_description() or u'' text += obj.get_title() or u'' text += obj.get_meta_keywords() if hasattr(obj, 'get_meta_keywords') and obj.get_meta_keywords() else u'' self.prepared_data['text'] = text return self.prepared_data def get_model(self): return Page def index_queryset(self, using=None): return Page.objects.published().filter(publisher_is_draft=False).distinct() |