0

我按照Django website的说明制作了自己的 SearchForm ,但由于某种原因,如果我添加自己的搜索字段,它不会返回任何结果,即使它应该返回结果。

我的 search_indexes.py:

from haystack import indexes 
from my.app.models import MyModel

class MyIndexIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.NgramField(document=True, use_template=True)    
    my_fieldname = indexes.CharField(model_attr='my_fieldname')

    def get_model(self):
        return MyModel

我的模型:

class MyModel(models.Model):
    some_field1 = models.CharField(_('Some field 1'), max_length=255)
    some_field2 = models.CharField(_('Some field 2'), max_length=255)

    my_fieldname = models.CharField(_('My field name'), max_length=255)

我的搜索表格:

class MySearchForm(SearchForm):
    q = forms.CharField(label="Search", max_length=255, required=False)
    my_fieldname = forms.CharField(label="MySearchLabel", max_length=255, required=False)

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

        if self.is_valid() and self.cleaned_data['my_fieldname']:
            sqs = sqs.filter(my_fieldname=AutoQuery(self.cleaned_data['my_fieldname']))

        return sqs

我的 urls.py:

urlpatterns += patterns('haystack.views',
    url(r'^search/', SearchView(
        form_class=MySearchForm
    ), name='haystack_search'),
)

我已经运行了 manage.py rebuild_index,但它不影响。我的问题是我在这里做错了什么,为什么我没有得到任何结果。如果我尝试使用 q 参数进行一些查询,结果会正常返回。

4

1 回答 1

1

super(MySearchForm, self).search()auto_query()使用默认字段名称执行...content由于您尚未定义这样的字段,因此它不会返回任何结果...因此我不会进行super调用,而是替换为类似于原始实现的实现-但将 a 传递fieldnameauto_query: auto_query(querystring, fieldname='text')

如果您在其中搜索,还要确保正确定义模板。(如果您要链接多个filter()调用,它们将被组合使用)。

此外,根据您使用的搜索引擎,它可能会为您提供一个前端,如果数据被正确索引,您可以独立于 haystack 进行检查......

于 2013-08-21T10:53:32.763 回答