django haystack分面搜索重定向(如果找到与属性完全匹配的内容)

django haystack分面搜索重定向(如果找到与属性完全匹配的内容),django,django-haystack,Django,Django Haystack,如果商店模型的name属性完全匹配,我需要将用户重定向到详细信息页面。在任何其他属性的情况下,无论是否直接匹配,它都应该直接进入搜索结果页面 我目前使用的FacetedSearchCustomView覆盖了Build_页面、create_Response和extra_content方法。但是我找不到一种方法将查询结果作为查询查看内部。\u结果受到保护 关于如何进行这项工作的任何建议 谢谢 更新 FacetedSearchCustomView.py class FacetedSearchCusto

如果商店模型的name属性完全匹配,我需要将用户重定向到详细信息页面。在任何其他属性的情况下,无论是否直接匹配,它都应该直接进入搜索结果页面

我目前使用的
FacetedSearchCustomView
覆盖了Build_页面、
create_Response
extra_content
方法。但是我找不到一种方法将查询结果作为查询查看内部。\u结果受到保护

关于如何进行这项工作的任何建议

谢谢

更新

FacetedSearchCustomView.py

class FacetedSearchCustomView(FacetedSearchView):
"""
Overrides various default methods to allow for additional context, smoother UX for faceting
"""

def build_page(self):
    """
    Paginates the results appropriately.

    Overriden to redirect to page 1 if a page_no is not found
    """
    try:
        page_no = int(self.request.GET.get('page', 1))
    except (TypeError, ValueError):
        raise Http404("Not a valid number for page.")

    if page_no < 1:
        raise Http404("Pages should be 1 or greater.")

    paginator = NamedPaginator(self.results, on="brand", per_page=self.results_per_page)
    # import pdb; pdb.set_trace()
    try:
        page = paginator.page(page_no)
    except InvalidPage:
        # Redirect to page 1 of the
        path = self.request.path
        qs = self.request.GET.copy()
        qs['page'] = 1
        url = '%s?%s' % (path, qs.urlencode())
        return redirect(url)

    return paginator, page

def clean_filters(self):
    """Returns a list of tuples (filter, value) of applied facets"""
    filters = []
    # get distinct facets
    facets = list(set(self.form.selected_facets))
    for facet in facets:
        if ":" not in facet:
            continue
        field, value = facet.split(":", 1)
        field = field.replace('_', ' ').replace('exact', '').title()
        filters.append((field, value))
    return filters

def create_response(self):
    """
    Generates the actual HttpResponse to send back to the user.

    Overriding to allow the redirect to pass through from overriden build_page
    """
    try:
        (paginator, page) = self.build_page()
    except ValueError:
        return self.build_page()

    context = {
        'query': self.query,
        'form': self.form,
        'page': page,
        'paginator': paginator,
        'suggestion': None,
    }

    if self.results and hasattr(self.results, 'query') and self.results.query.backend.include_spelling:
        context['suggestion'] = self.form.get_suggestion()

    context.update(self.extra_context())
    return render_to_response(self.template, context, context_instance=self.context_class(self.request))

def extra_context(self):
    extra = super(FacetedSearchCustomView, self).extra_context()
    extra['filters'] = self.clean_filters()
    if not self.results:
        extra['facets'] = self.form.search().facet_counts()
    else:
        extra['facets'] = self.results.facet_counts()

    model_type = self.request.path.split('/')[1].rstrip('s')
    extra['model_type'] = None if model_type == "search" else model_type

    # if model_type in ['package', 'project']:
    # extra['facets'] = self.clean_facets(extra['facets'])
    #     extra['model_create'] = '%s_create' % model_type
    return extra

过去我通过查看
SearchQuerySet.best\u match
然后比较名称来实现类似的功能


我们可以看看您已经编写的代码吗?
class CustomSearchForm(FacetedSearchForm):

def search(self):
    sqs = super(CustomSearchForm, self).search()

    # We need to process each facet to ensure that the field name and the
    # value are quoted correctly and separately:
    for facet in self.selected_facets:
        if ":" not in facet:
            continue

        field, value = facet.split(":", 1)

        if value:
            sqs = sqs.narrow(u'%s:"%s"' % (field, sqs.query.clean(value)))

    return sqs