首页 文章

Django Haystack自定义搜索表单

提问于
浏览
1

我有一个基本的django-haystack SearchForm工作正常,但现在我正在尝试创建一个自定义搜索表单,其中包含一些额外的字段来过滤 .

我已经关注创建自定义表单和视图的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'),
    ....
]

1 回答

  • 2

    Haystack的 SearchView 是一个基于类的视图,添加urls条目时必须调用 .as_view() 类方法 .

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

相关问题