Вопрос

I started using Haystack, and everything seems to be working, the index was created, etc..

The urls on my website are all of the type '/something/someparam/someotherparam'

and I use ajax calls to get every piece together.

Now, I would like for haystack to receive the query in such a format. This is what I've been doing so far

#Nothing special here, default stuff
class ProjectSearchForm(SearchForm):
def search(self):
    # First, store the SearchQuerySet received from other processing.
    sqs = super(ProjectSearchForm, self).search()

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

#Same here, nothing much, except that I'm trying to grab the query from a view parameter
class ProjectsSearchView(SearchView):
    template = 'projects/_project_archive.html'
    searchqueryset = SearchQuerySet().models(Project)
    form_class = ProjectSearchForm

    def get_query(self):
        return self.kwargs['query']

In my urls.py I'm trying to do something like this:

    url(
    regex=r'search/(?P<query>[-\w\d\+]+)$',
    view=ProjectsSearchView.as_view(),
),

So, I was hoping that "ProjectSearchView" would catch the regex parameter 'query' and pass it as search query to the form in order to perform the search.. But this isn't working (basically because Haystack's views are not like django views, and I'm not sure they can get parameters from the regex.

I tried making the view a subclass of ListView (or simple view), but it didn't work.

Это было полезно?

Решение

I ended up writing my own view rather than subclassing Haystack's ones. Here it is:

class ProjectsSearchView(ListView):
    template_name = 'projects/_project_archive.html'
    searchqueryset = SearchQuerySet().models(Project)

    def get_queryset(self):
        return self.searchqueryset.filter(content=self.kwargs['query'])
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top