2013-08-21 1 views
0

Django website의 지침에 따라 자체 SearchForm을 만들었지 만, 내 자신의 검색 필드를 추가하면 어떤 이유로 결과를 반환해야 할 때도 결과를 반환하지 않습니다.Django Haystack 사용자 지정 양식 사용자 지정 특성이 결과를 반환하지 않습니다.

내 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()는이 같은 필드를 정의하지 않은대로 따라서 나는 super 전화를하지 않을 것입니다 ... 어떤 결과를 반환하지만,로 대체하지 않습니다 ... content의 기본 필드 이름을 가진 auto_query()을 수행 original one과 유사한 구현이지만 fieldname ~ auto_query : auto_query(querystring, fieldname='text')을 전달합니다.

템플릿을 검색 할 때 템플릿을 올바르게 정의했는지 확인하십시오. (복수 filter() 호출을 연결하는 경우 으로 결합됩니다.

또한 사용자가 사용하는 검색 엔진이 ... 당신에게 데이터가 제대로 색인 경우는 건초 더미에서 독립적으로 확인 할 수있는 프론트 엔드를 제공 아마됩니다에 따라

관련 문제