Я создаю многоязычный 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, но не индексов дочерних сайтов. Есть ли разумный способ сделать это?