Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 覆盖Haystack中的用户查询_Python_Django_Search_Django Haystack - Fatal编程技术网

Python 覆盖Haystack中的用户查询

Python 覆盖Haystack中的用户查询,python,django,search,django-haystack,Python,Django,Search,Django Haystack,我希望我的数据库中的用户查询按字母顺序排序。例如,如果用户输入“sit”,则在Haystack搜索索引中将其更改为“ist” 我相信凌驾于此将实现这一点,但无法使其发挥作用 #forms.py from haystack.forms import SearchForm class WordsSearchForm(SearchForm): q_default = forms.CharField(required=False, label=_('Search'),

我希望我的数据库中的用户查询按字母顺序排序。例如,如果用户输入“sit”,则在Haystack搜索索引中将其更改为“ist”

我相信凌驾于此将实现这一点,但无法使其发挥作用

#forms.py
from haystack.forms import SearchForm

class WordsSearchForm(SearchForm):

    q_default = forms.CharField(required=False, label=_('Search'),
                            widget=forms.TextInput(attrs={'type': 'search'}))

    q = ''.join(sorted(q_default))

关于如何实现这一点,有什么建议吗?

事实证明,定制Haystack有点棘手。要覆盖用户查询,需要创建forms.py文件、更新views.py和更新url.py

#forms.py
from haystack.forms import SearchForm

class WordsSearchForm(SearchForm):

def search(self):
    # added the two lines below
    q = self.cleaned_data['q']
    q = ''.join(sorted(q))

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

    if not self.cleaned_data.get('q'):
        return self.no_query_found()

    # default is...
    # sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])
    sqs = self.searchqueryset.auto_query(q)

    if self.load_all:
        sqs = sqs.load_all()

    return sqs


# views.py
from haystack.views import SearchView

from .models import [NAME OF YOUR MODEL]
from .forms import WordsSearchForm

class MySearchView(SearchView):

    form = WordsSearchForm


#urls.py
from haystack.views import SearchView, search_view_factory
from scrabble.views import MySearchView
from APP.forms import WordsSearchForm

urlpatterns = patterns('',
    # replace default haystack url
    # url(r'^search/', include('haystack.urls')),

      url(r'^search/$', search_view_factory(
                       form_class=WordsSearchForm
                       ), name='haystack_search'),
)