Note that there are some explanatory texts on larger screens.

plurals
  1. POdjango cms search with multiple sites?
    primarykey
    data
    text
    <p>I've set up multiple sites within a single instance of django cms with haystack for search (with Solr). However, the search_indexes.py that I've got doesn't appear to have any effect. It's like it's just ignored and a default one is used. Why isn't my search_indexes.py taking effect?</p> <p>I've got the following:</p> <p>settings.py:</p> <pre><code>HAYSTACK_SITECONF = 'mysite.search_sites' </code></pre> <p>search_sites.py:</p> <pre><code>from cms.models import monkeypatch_reverse import haystack monkeypatch_reverse() haystack.autodiscover() </code></pre> <p>mysite/app/search_indexes.py:</p> <pre><code>from django.conf import settings from django.utils.translation import string_concat, ugettext_lazy from django.utils.html import strip_tags from haystack import indexes, site from cms.models.managers import PageManager from cms.models.pagemodel import Page from cms.models.pluginmodel import CMSPlugin def page_index_factory(lang, lang_name): if isinstance(lang_name, basestring): lang_name = ugettext_lazy(lang_name) def get_absolute_url(self): if 'cms.middleware.multilingual.MultilingualURLMiddleware' in settings.MIDDLEWARE_CLASSES: return '/%s%s' % (lang, Page.get_absolute_url(self)) else: return Page.get_absolute_url(self) class Meta: proxy = True app_label = 'cms' if len(settings.LANGUAGES) &gt; 1: verbose_name = string_concat(Page._meta.verbose_name, ' (', lang_name, ')') verbose_name_plural = string_concat(Page._meta.verbose_name_plural, ' (', lang_name, ')') else: verbose_name = Page._meta.verbose_name verbose_name_plural = Page._meta.verbose_name_plural attrs = {'__module__': Page.__module__, 'Meta': Meta, 'objects': PageManager(), 'get_absolute_url': get_absolute_url} _PageProxy = type("Page_%s" % lang.title() , (Page,), attrs) _PageProxy._meta.parent_attr = 'parent' _PageProxy._meta.left_attr = 'lft' _PageProxy._meta.right_attr = 'rght' _PageProxy._meta.tree_id_attr = 'tree_id' class _PageIndex(indexes.SearchIndex): site_id = indexes.IntegerField(model_attr="site__id") language = lang text = indexes.CharField(document=True, use_template=False) pub_date = indexes.DateTimeField(model_attr='publication_date') login_required = indexes.BooleanField(model_attr='login_required') url = indexes.CharField(stored=True, indexed=False, model_attr='get_absolute_url') title = indexes.CharField(stored=True, indexed=False, model_attr='get_title') def prepare(self, obj): self.prepared_data = super(_PageIndex, self).prepare(obj) plugins = CMSPlugin.objects.filter(language=lang, placeholder__in=obj.placeholders.all()) text = '' for plugin in plugins: instance, _ = plugin.get_plugin_instance() if hasattr(instance, 'search_fields'): text += ''.join(strip_tags(getattr(instance, field, '')) for field in instance.search_fields) if getattr(instance, 'search_fulltext', False): text += strip_tags(instance.render_plugin()) self.prepared_data['text'] = text return self.prepared_data def index_queryset(self): qs = _PageProxy.objects.published().filter(title_set__language=lang).distinct() if 'publisher' in settings.INSTALLED_APPS: qs = qs.filter(publisher_is_draft=True) return qs return _PageProxy, _PageIndex for lang_tuple in settings.LANGUAGES: lang, lang_name = lang_tuple site.register(*page_index_factory(lang, lang_name)) </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload