Поиск в стоге сена не возвращает результаты должным образом, ошибка: список "объект не имеет атрибута" фильтр "
Я нуб в Django и Haystack, это моя форма, которая расширяет Haystack SearchForm
from haystack.forms import SearchForm
from ksaprice_app.models import ProductDiff, Vendor
from django import forms
from haystack.query import SearchQuerySet
class ProductsSearchForm(SearchForm):
vendor_list=Vendor.objects.all().values_list('vendor_name')
OPTIONS=( (item,str(item)) for item in vendor_list)
print OPTIONS select_vendor=forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,choices=OPTIONS, required=False)
def __init__(self, *args, **kwargs):
super(ProductsSearchForm, self).__init__(*args, **kwargs)
def search(self):
sqs=super(ProductsSearchForm, self).search()
if not self.is_valid():
return self.no_query_found()
#check to see if the submitted is clean and then filter
if self.is_valid():
if self.cleaned_data['select_vendor']:
#name of the field in html will be by default form field name
vendor_filter=self.cleaned_data['select_vendor']
#v_filter=vendor_filter[0].replace("(u'","").replace("',)","")
v_filter=vendor_filter[0]
print v_filter
#sqs=SearchQuerySet().filter(product_vendor_name=v_filter)[:10]
sqs=sqs.filter(product_vendor_name=v_filter)[:10] ##error is here
return sqs
def no_query_found(self):
return self.searchqueryset.all()[:10]
и это вид
def ProductsSearch(request):
#instantiate the form with parameters from get method
form = forms.ProductsSearchForm(request.GET)
#calling search method here that fetches the search result
context_var={}
context_var['products'] = form.search()
context_var['form']=forms.ProductsSearchForm
print context_var
return render_to_response('ksaprice_app/product_search.html', {'context_var': context_var})
в sqs.filter, я получаю эту ошибку 'list' object has no attribute 'filter'
, Я следовал за документацией и примером. Я не могу понять, в чем проблема? Метод поиска возвращает объект списка вместо объекта SearchQuerySet и, следовательно, не может найти атрибут фильтра. пожалуйста помоги. Я использую Python 2.7.10, Django 1.8.4 и Solr 4.10.2
sqs
2 ответа
Через 3-4 дня я достиг решения.
Решение 1-: изменение в схеме
Шаг 1: Перейдите в файл управляемой схемы вашей коллекции и отредактируйтеШаг 2: Найдите и замените <field name="django_ct" type="text_general"/>
в <field name="django_ct" type="string"/>
- Версия операционной системы: Ubuntu 14.04 LTS
- Версия для поисковой системы: Solr 7.2.1
- Версия Python: 3.4.3
- Джанго версия: 2.0
- Версия стога сена: 2.8.0
Решение 2-: взломать основной файл
Шаг 1: sudo vim / home / ваш путь /site-packages/haystack/backends/solr_backend.pyШаг 2: Найти и заменить app_label, model_name = raw_result[DJANGO_CT].split('.')
в app_label, model_name = raw_result[DJANGO_CT][0].split('.')
Шаг 1:
sudo vim /home/your path/site-packages/haystack/backends/solr_backend.py
Шаг 2: Найдите и замените
app_label, model_name = raw_result[DJANGO_CT].split('.')
с
app_label, model_name = raw_result[DJANGO_CT][0].split('.')
Шаг 3: Найдите и замените
result = result_class(app_label, model_name, raw_result[DJANGO_ID], raw_result['score'], **additional_fields)
с
result = result_class(app_label, model_name, raw_result[DJANGO_ID][0], raw_result['score'], **additional_fields)