2016-11-04 4 views
1

J'ai un django-haystack de base fonctionnant correctement, mais maintenant j'essaye de créer un formulaire de recherche personnalisé qui inclut un ou deux champs supplémentaires à filtrer.Django Haystack Formulaire de Recherche Personnalisée

J'ai suivi la documentation Haystack sur la création de formulaires personnalisés et des vues, mais lorsque je tente de voir la forme que je ne peut obtenir l'erreur:

ValueError at /search/calibration/ 

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

Ne devrait pas baser cela sur SearchForm prendre soin de renvoyer un objet 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'), 
    .... 
] 

Répondre

2

Haystack de SearchView est une vue à base de classe, vous devez appeler .as_view() méthode de classe lorsque ajouter une entrée URL.

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

Argh, de petites choses comme ça me rattrapent encore! Correction qui m'a conduit à une autre erreur 'l'objet n'a aucun attribut 'as_view'', ce qui était parce que j'avais utilisé' def calibration_search (SearchView): 'au lieu de' class calibration_search (SearchView): ' Au moins je peux voir le formulaire correctement maintenant, le seul problème est qu'il ne renvoie aucun résultat, peu importe ce que je recherche ... – TimJ

+0

Avez-vous ajouté les données à l'index de recherche en utilisant la commande 'rebuild_index'? – v1k45

+0

J'ai, je sais que l'index fonctionne comme je peux le voir dans l'interface d'administration en utilisant haystack-browser et mon autre (principal) formulaire de recherche fonctionne toujours parfaitement. Pour une raison quelconque, mon formulaire personnalisé n'obtient aucun résultat. – TimJ