que estoy tratando de hacer una búsqueda personalizada utilizando pajar Django, acabo de modificar en la documentación del pajar:Django pajar formulario personalizado
forms.py
from django import forms
from haystack.forms import SearchForm
class DateRangeSearchForm(SearchForm):
start_date = forms.DateField(required=False)
end_date = forms.DateField(required=False)
def search(self):
# First, store the SearchQuerySet received from other processing.
sqs = super(DateRangeSearchForm, self).search()
# Check to see if a start_date was chosen.
if self.cleaned_data['start_date']:
sqs = sqs.filter(pub_date__gte=self.cleaned_data['start_date'])
# Check to see if an end_date was chosen.
if self.cleaned_data['end_date']:
sqs = sqs.filter(pub_date__lte=self.cleaned_data['end_date'])
return sqs
a:
from django import forms
from haystack.forms import HighlightedModelSearchForm
class CustomSearchForm(HighlightedModelSearchForm):
title = forms.CharField(max_length = 100, required = False)
content = forms.CharField(max_length = 100, required = False)
date_added = forms.DateField(required = False)
post_by = forms.CharField(max_length = 100, required = False)
def search(self):
sqs = super(CustomSearchForm, self).search()
if self.cleaned_data['post_by']:
sqs = sqs.filter(content = self.cleaned_data['post_by'])
if self.cleaned_data['title']:
sqs = sqs.filter(content = self.cleaned_data['title'])
if self.cleaned_data['content']:
sqs = sqs.filter(content = self.cleaned_data['content'])
if self.cleaned_data['date_added']:
sqs = sqs.filter(content = self.cleaned_data['date_added'])
return sqs
haystack .urls:
urlpatterns = patterns('haystack.views',
url(r'^$', search_view_factory(view_class = SearchView, form_class = CustomSearchForm), name='haystack_search'),
)
cuando voy a la url, que dice: AttributeError en/Búsqueda/
objeto 'CustomSearchForm' no tiene atributo 'cleaned_data'
pueden ustedes ayudarme? thx
Luego trato de comentar el método de búsqueda, pero cuando envío una palabra en el campo personalizado, el resultado es siempre nada, solo cuando presento una palabra en un campo no personalizado puedo dar el resultado que quiero, Ya intenté entender esto todo el día, por favor ayuda
Aquí está una mejor manera, 'if esinstance (sqs, EmptySearchQuerySet): return sqs' lo hace después de la llamada' super() 'y elimina todo el' is_valid() ' – nitely