Django Haystack自定义表单自定义属性不返回任何结果

时间:2013-08-21 10:24:30

标签: python django python-2.7 django-haystack

我按照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参数尝试一些查询,结果会正常返回。

1 个答案:

答案 0 :(得分:1)

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

如果您正在搜索模板,请确保正确定义模板。 (如果您要链接多个filter()来电,则会将它们与组合在一起。

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

相关问题