2013-07-29 2 views
4

Я следующий запросHaystack модели Свист() не сужая модели

locations = SearchQuerySet().filter_or(content__in=words).models(Location) 

но это возвращение других моделей, а, я бы только хочу видеть примеры Местоположение.

Использование Хейстек 2.1.0 и Свист 2.5

Есть идеи?

ответ

3

Моя текущая работа вокруг использовать filter(django_ct='app_name.model')

1

Я столкнулся с той же проблемой с фильтрование модели игнорируются. Мне удалось получить .models(), работая путем понижения до Haystack 2.0.0 и Whoosh 2.4.1

+0

думал, что я делаю что-то неправильно, хорошо, что кто-то проверяет проблему –

+0

Ваше решение фильтра (django_ct = «app_name.model») работает отлично ... Есть ли недостаток в использовании вашего решения? – ratata

0

This is based partly on James Lims answer, но это должно работать для любых версий Haystack и Whoosh. К сожалению, ни одна из сторон на самом деле не приходит на помощь, но нижеследующее решение кажется не слишком плохим.

class MySearchQuerySet(SearchQuerySet): 
    def models(self,*mods): 
     # We have to redefine this because Whoosh & Haystack don't play well with model filtering 
     from haystack.utils import get_model_ct 
     mods = [get_model_ct(m) for m in mods] 
     return self.filter(django_ct__in=mods) 

Тогда где-либо SearchQuerySet использование MySearchQuerySet вместо:

MySearchQuery().filter(name="foo").models(my_models.bar,my_models.baz) 
Смежные вопросы