Django haystack, Как искать поле, связанное с ManyToMany?

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

Двигатель УЖАС.

Вот как выглядит мой индекс:

 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().filter(region__in=words_list), это работает. Проблема в том, что я не знаю, когда пользователь ищет регион или другое поле, поэтому мне приходится использовать SearchQuerySet().filter(content__icontains=words_list). И таким образом ничего не найдено.

Спасибо

Спасибо!!


person Félix    schedule 27.08.2010    source источник
comment
Вы добавили поле регионов в свой шаблон индекса?   -  person soField    schedule 16.11.2011
comment
Попробуйте использовать Solr. Гораздо, намного быстрее.   -  person Dana Woodman    schedule 10.12.2011
comment
Как насчет того, чтобы просто добавить {{ object.regions.all | join:" " }} в шаблон поля text?   -  person maciek    schedule 12.08.2015


Ответы (2)


Пытаться :

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')
person andrebola    schedule 13.08.2011

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

Пытаться

    def prepare_regions(self, obj):
        return [region.pk for region in obj.regions.all()]
person Emmanuel Osimosu    schedule 21.07.2015