2017-04-30 9 views
0

私はDjango Haystack Whooshの検索結果が見つからない場合、すべての結果を返すことを目指しています。Django HaystackのSearchFormメソッドをオーバーライドする方法

Haystackのドキュメントでは、これを行うためにSearchFormのno_query_foundメソッド(下記参照)をオーバーライドすることができます。しかし、私はどのように考えていない。何か案は?

class SearchForm(forms.Form): 
    def no_query_found(self): 

    """ 
    Determines the behavior when no query was found. 
    By default, no results are returned (``EmptySearchQuerySet``). 
    Should you want to show all results, override this method in your 
    own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``. 
    """ 

    return EmptySearchQuerySet() 

ここに私のforms.pyです:

from django import forms 
from .models import Blog, Category 
from locations.models import Country, County, Municipality, Village 
from haystack.forms import SearchForm 

class DateRangeSearchForm(SearchForm): 
    start_date = forms.DateField(required=False) 
    end_date = forms.DateField(required=False) 

def search(self): 
    # First, store the SearchQuerySet received from other processing. 
    sqs = super(DateRangeSearchForm, self).search() 

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

    # Check to see if a start_date was chosen. 
    if self.cleaned_data['start_date']: 
     sqs = sqs.filter(pub_date__gte=self.cleaned_data['start_date']) 

    # Check to see if an end_date was chosen. 
    if self.cleaned_data['end_date']: 
     sqs = sqs.filter(pub_date__lte=self.cleaned_data['end_date']) 

    return sqs 

答えて

0

うーん...ただ単にclearifyためにあなたのサブクラスで

class DateRangeSearchForm(SearchForm): 
    start_date = forms.DateField(required=False) 
    end_date = forms.DateField(required=False) 

    def no_query_found(self): 
     # do here your custom stuff, you get access to self.searchqueryset 
     # and return it 

    def search(self): 
     # your search method 
+0

Thanx!私はそれを試みたと思ったが、私は混乱してしまった他のことをしていたことが判明した。 –

0

をそのメソッドを追加し、これは私がした所期の結果を得ました目指して。ありがとう、ムジ!

class DateRangeSearchForm(SearchForm): 
    start_date = forms.DateField(required=False) 
    end_date = forms.DateField(required=False) 

def no_query_found(self): 
    # Added the return clause here: 
    return self.searchqueryset.all() 
関連する問題