2010-08-27 2 views
6

Я добавил MultivaluedField к моему индексу (стог сена), мне нужно найти многоеголовое поле, связанное с ManyToMany, но оно не работает.Django haystack multivalued не работает

Двигатель - это WHOOSH.

Это как мой указательный выглядит следующим образом:

class PostIndex(SearchIndex): 
    text = CharField(document=True, use_template=True) 
    author = CharField(model_attr='author') 
    body = CharField(model_attr='body') 
    pub_date = DateTimeField(model_attr='publish') 
    regions = MultiValueField() 

def prepare_regions(self, obj): 
    return [region.name for region in obj.regions.all()] 

И это, как моя модель выглядит следующим образом:.

class Post(models.Model): 

    title   = models.CharField(_('title'), max_length=200) 
    author   = models.ForeignKey(User, blank=True, null=True) 
    body   = models.TextField(_('body'),) 
    allow_comments = models.BooleanField(_('allow comments'), default=True) 
    publish   = models.DateTimeField(_('publish'), default=datetime.datetime.now) 
    categories  = models.ManyToManyField(Category, blank=True) 
    tags   = TagField() 
    objects   = PublicManager() 

    regions   = models.ManyToManyField(Region, blank=True) 

Если я использую SearchQuerySet() фильтр (region__in = words_list) он работает. Проблема в том, что я не знаю, когда пользователь ищет регион или другое поле, поэтому мне нужно использовать SearchQuerySet(). Filter (content__contains = words_list). И таким образом ничего не найдено.

Thanks

Спасибо!

+0

вы добавить поле регионов в шаблон индекса? – soField

+0

Попробуйте использовать [Solr] (http://lucene.apache.org/solr/). Много, намного быстрее. –

+0

Как насчет добавления '{{object.regions.all | join: ""}} 'в шаблоне поля' text'? – maciek

ответ

0

Try:

class PostIndex(SearchIndex): 
text = CharField(document=True, use_template=True) 
author = CharField(model_attr='author') 
body = CharField(model_attr='body') 
pub_date = DateTimeField(model_attr='publish') 

regions = CharField(model_attr='regions') 
0

Вы только добавить идентификатор региона к индексу для региона.

Попробуйте

def prepare_regions(self, obj): 
     return [region.pk for region in obj.regions.all()]