2014-05-15 1 views
1

Django/Haystack app에 사용자 쿼리를 사전 순으로 정렬하고 싶습니다. 예를 들어 사용자가 "앉아"라고 입력하면 건초 더미 검색 색인에서 "ist"로 변경됩니다.건초 더미에서 사용자 쿼리를 무시하십시오.

default Haystack forms.py을 재정의하면 문제가 해결되지만 제대로 작동하지 않습니다.

#forms.py 
from haystack.forms import SearchForm 

class WordsSearchForm(SearchForm): 

    q_default = forms.CharField(required=False, label=_('Search'), 
          widget=forms.TextInput(attrs={'type': 'search'})) 

    q = ''.join(sorted(q_default)) 

어떻게해야합니까?

답변

1

덤불을 맞춤 설정하는 것은 조금 힘듭니다. 사용자 쿼리를 재정의하려면 forms.py 파일을 만들고, views.py를 업데이트하고, urls.py를 업데이트해야합니다.

#forms.py 
from haystack.forms import SearchForm 

class WordsSearchForm(SearchForm): 

def search(self): 
    # added the two lines below 
    q = self.cleaned_data['q'] 
    q = ''.join(sorted(q)) 

    if not self.is_valid(): 
     return self.no_query_found() 

    if not self.cleaned_data.get('q'): 
     return self.no_query_found() 

    # default is... 
    # sqs = self.searchqueryset.auto_query(self.cleaned_data['q']) 
    sqs = self.searchqueryset.auto_query(q) 

    if self.load_all: 
     sqs = sqs.load_all() 

    return sqs 


# views.py 
from haystack.views import SearchView 

from .models import [NAME OF YOUR MODEL] 
from .forms import WordsSearchForm 

class MySearchView(SearchView): 

    form = WordsSearchForm 


#urls.py 
from haystack.views import SearchView, search_view_factory 
from scrabble.views import MySearchView 
from APP.forms import WordsSearchForm 

urlpatterns = patterns('', 
    # replace default haystack url 
    # url(r'^search/', include('haystack.urls')), 

     url(r'^search/$', search_view_factory(
         form_class=WordsSearchForm 
         ), name='haystack_search'), 
) 
관련 문제