2013-08-21 87 views
0

我做了我自己的SearchForm按照来自Django website的说明,但由于某种原因,如果我添加自己的搜索字段,它不会返回任何结果,即使它应该返回结果。Django草垛自定义表单自定义属性返回没有结果

我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

super(MySearchForm, self).search()执行与的content默认字段名称的auto_query() ...当你还没有定义一个字段这样它不会返回任何结果。所以我不会做的super电话,但将其替换一个类似于original one的实现 - 但通过fieldnameauto_queryauto_query(querystring, fieldname='text')

如果您在其中搜索,请确保正确定义模板。 (如果您正在链接多个filter()来电,他们将结合使用)。

同样取决于您使用它的搜索引擎可能会为您提供一个前端,您可以从干草堆中独立检查数据是否正确索引...