django haystack搜索表单找不到is_vald方法

时间:2012-12-28 22:41:01

标签: python django django-forms django-haystack

我正在使用haystack对所有选定过滤器属性的Person模型执行简单的搜索查询。我决定尝试使用分面搜索表单并创建一个通用的TemplateView SearchView

class SearchView(TemplateView):
    template_name = "index.html"
    results = EmptySearchQuerySet()
    form_class = FacetedSearchForm
    form = None
    query = ''
    selected_people = None

    def get(self, request, **kwargs):
        self.request = request
        self.query = self.get_query()
        if self.form.is_valid():
            self.results = self.get_results()
        context = self.get_context_data(request, **kwargs)

        if request.is_ajax() or request.GET.get('ajax'):
            self.template_name = 'search/Taleebo/search_results.html'

        return self.render_to_response(context)

    def get_query(self):
        return self.request.GET.get('q')

    def get_results(self):
        return self.form.search()

所有路由工作正常但是当调用我的get方法时,它在

行失败
self.form.is_valid()

,错误显示为NoneType' object has no attribute 'is_valid'

我使用的是默认的form_class,所以不应该定义该属性吗?

编辑:

我现在尝试使用haystack提供的SearchView,而is_valid不再是问题,但我没有从'结果'中获取任何记录。我改变了我的urls.py看起来像这样

 url(r'^search/person/', search_view_factory(
    view_class=SearchView,
    template='index.html',
    form_class=ModelSearchForm
), name='haystack_search'),

1 个答案:

答案 0 :(得分:0)

当您没有要访问的实例时,使用任何类都会导致相同的错误:

class SearchView(TemplateView):
(...)
      form = None  //<= Here you set the form to None

因此,您在is_valid()上呼叫None,而不是在实际表单上。