2014-01-15 1 views
0

Я создаю многоязычный django, это сайты блога, есть мастер-сайт и множество других дочерних сайтов.Django Haystack Multisite Indexes

Так что разные файлы настройки для различных сайтов, каждый из параметров импортируют основные параметры и переопределяют конкретные значения, пример настройки дочернего сайта выглядит следующим образом:

import os 
from os.path import join, dirname 

PROJECT_ROOT = dirname(dirname(__file__)) 
VIRTUALENV_ROOT = dirname(PROJECT_ROOT) 

try: 
    from settings import * 
except: pass 

SITE_ID = 3 
SITE_NAME = 'child1' 

TEMPLATE_DIRS = ( 
    join(PROJECT_ROOT, 'templates', SITE_NAME), 
    join(PROJECT_ROOT, 'templates', 'master'), 
    join(PROJECT_ROOT, 'templates'), 
) 

STATIC_ROOT = join(VIRTUALENV_ROOT, 'public-www', 'static', SITE_NAME) 

STATIC_URL = '/static/{}/'.format(SITE_NAME) 

STATICFILES_DIRS = ( 
    join(PROJECT_ROOT,'static', SITE_NAME), 
    join(PROJECT_ROOT,'static'), 
) 

HAYSTACK_CONNECTIONS = {. 
    'default': { 
     'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 
     'PATH': os.path.join(VIRTUALENV_ROOT, 'whoosh_index', SITE_NAME), 
    },.. 
} 

Если я перестраивать индексы вручную для каждого сайт, все они работают нормально. Вот это search_indexes:

import datetime 
from haystack import indexes 
from articles.models import Story 
from django.contrib.sites.models import Site 

current_site = Site.objects.get_current() 

class StoryIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    title = indexes.CharField(model_attr='title') 
    introtext = indexes.CharField(model_attr='introtext') 
    content = indexes.CharField(model_attr='content') 
    author = indexes.CharField(model_attr='author') 

    def get_model(self): 
     return Story 

    def index_queryset(self, using=None): 
     return Story.active_objects.filter(sites__in=[current_site]) 

Однако, у меня есть требование, чтобы создать статьи на мастер-сайте, и выбрать, какие сайты статьи появляться.

Проблема заключается в том, чтобы создавать статьи на главном сайте, это только обновление индекса master, но не индексов дочерних сайтов. Есть ли разумный способ сделать это?

ответ

0

Текущая работа вокруг, что работает для меня, использует единый индекс поиска, с многозначным полем для выбора сайтов, например:

sites = MultiValueField() 

def prepare_sites(self, obj): 
    return [site.domain for site in obj.sites.all()] 

Затем написать свой собственный поисковый запрос:

from haystack.query import SearchQuerySet 
from django.contrib.sites.models import Site 
from django.shortcuts import render 

current_site = Site.objects.get_current() 

def search(request): 
    cx = {} 
    query = request.GET.get('q', '') 
    cx['query'] = query 
    cx['result'] = SearchQuerySet().filter(content=query, sites__in=[current_site.domain]) 
    return render(request, 'search/search.html', cx) 

 Смежные вопросы

  • Нет связанных вопросов^_^