Многозначность сена Джанго не работает - PullRequest
6 голосов
/ 27 августа 2010

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

Двигатель 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__icontains = words_list). И таким образом ничего не найдено.

Спасибо

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 21 июля 2015

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

Попробуйте

    def prepare_regions(self, obj):
        return [region.pk for region in obj.regions.all()]
0 голосов
/ 13 августа 2011

Попробуйте:

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')
...