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()