Я пытаюсь использовать django-haystack + whoosh в своем приложении Django. Мой класс индекса выглядит как этотКак фильтровать результаты с помощью django-haystack SearchQuerySet?
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
abstract = indexes.CharField(model_attr='abstract')
def get_model(self):
return Article
def index_queryset(self, using=None):
return self.get_model().objects.all()
и моя модель выглядит следующим образом:
class Article(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(User)
abstract = models.CharField(max_length=500, blank=True)
full_text = models.TextField(blank=True)
proquest_link = models.CharField(max_length=200, blank=True, null=True)
ebsco_link = models.CharField(max_length=200, blank=True, null=True)
def __unicode__(self):
return self.title
В моем шаблоне я использую поле поиска Ajax для запроса Статьи моделей и возвращать результаты в такой же страница. По сути, ajax запускает запрос HttpPost, содержащий текст поиска для представления. В представлении я хочу получить весь объект статьи, чье абстрактное поле содержит текст поиска, отправленный через HttpPost. На мой взгляд, я получаю текст поиска, а затем пытаюсь получить модели, такие как
search_text = request.POST['search_text']
articles = SearchQuerySet().filter(abstract=search_text)
но не возвращает никаких результатов. Если я позвоню
articles = SearchQuerySet().all()
он вернет 12 объектов модели в локальную тестовую БД. Однако функция фильтра не возвращает никаких результатов. Что я хочу сделать, это эквивалент
articles= Article.objects.filter(abstract__contains=search_text)
Любые предложения? Спасибо
Вы помните, что после изменения в «ArticleIndex» вы забыли вызвать «manage.py update_index»? – maciek
Не могу поверить, что я это помню, но да! – AndrewSmiley