2016-11-04 11 views
1

基本的なdjango-haystack SearchFormが正常に機能していますが、フィルタリングするための余分なフィールドを含むカスタム検索フォームを作成しようとしています。Django Haystackカスタム検索フォーム

私はカスタムフォームやビューを作成するに干し草のマニュアルを参照して続いてきたが、私は私が唯一のエラーを取得することができ、フォームを表示しようとすると:

ValueError at /search/calibration/ 

The view assetregister.views.calibration_search didn't return an HttpResponse object. It returned None instead. 

がSearchFormでこれを基づかべきではないの世話をしますHttpResponseオブジェクトを返すか?

forms.py

from django import forms 
from haystack.forms import SearchForm 

class CalibrationSearch(SearchForm): 
    calibration_due_before = forms.DateField(required=False) 
    calibration_due_after = forms.DateField(required=False) 

    def search(self): 
     #First we need to store SearchQuerySet recieved after/from any other processing that's going on 
     sqs = super(CalibrationSearch, self).search() 

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

     #check to see if any date filters used, if so apply filter 
     if self.cleaned_data['calibration_due_before']: 
      sqs = sqs.filter(calibration_date_next__lte=self.cleaned_data['calibration_due_before']) 

     if self.cleaned_data['calibration_due_after']: 
      sqs = sqs.filter(calibration_date_next__gte=self.cleaned_data['calibration_due_after']) 

     return sqs 

views.py

from .forms import CalibrationSearch 
from haystack.generic_views import SearchView 
from haystack.query import SearchQuerySet 


def calibration_search(SearchView): 
    template_name = 'search/search.html' 
    form_class = CalibrationSearch 
    queryset = SearchQuerySet().filter(requires_calibration=True) 

    def get_queryset(self): 
     queryset = super(calibration_search, self).get_queryset() 
     return queryset 

urls.py

from django.conf.urls import include, url 
from . import views 

urlpatterns = [ 
    .... 
    url(r'^search/calibration/', views.calibration_search, name='calibration_search'), 
    .... 
] 

答えて

2

ヘイスタックのSearchViewは、クラスベースのビューである、あなたはとき.as_view()クラスメソッドを呼び出す必要がありますurlsエントリを追加します。

url(r'^search/calibration/', views.calibration_search.as_view(), name='calibration_search'), 
+0

このような小さなものはまだ私をキャッチします! 私は 'class calibration_search(SearchView):'の代わりに 'def calibration_search(SearchView):'を使用していたため、オブジェクトに属性 'as_view'がありませんでした。 少なくとも私はできます今すぐフォームを見てください。唯一の問題は、何を検索しても結果が返ってこないということです。 – TimJ

+0

'rebuild_index'コマンドを使ってインデックスを検索するためのデータを追加しましたか? – v1k45

+0

私は、haystack-browserを使用して管理インターフェースで見ることができ、私の他の(主な)検索フォームはまだ完全に機能しているので、インデックスが機能しています。 何らかの理由で私のカスタマイズされたフォームが結果を得られません。 – TimJ

関連する問題