Tôi đang cố gắng để thực hiện một hình thức tìm kiếm tùy chỉnh sử dụng đống cỏ khô django, tôi chỉ cần thay đổi từ tài liệu đống cỏ khô của:django Haystack hình thức tùy chỉnh
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
tới:
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'),
)
khi tôi đi đến url, nó nói: AttributeError tại/tìm kiếm/
đối tượng 'CustomSearchForm' không có thuộc tính 'cleaned_data'
có thể các bạn giúp tôi? Thx
Sau đó, tôi cố gắng bình luận phương pháp tìm kiếm, nhưng khi tôi gửi một từ vào trường tùy chỉnh, kết quả là không có gì, chỉ khi tôi gửi một từ đến trường tùy chỉnh, nó có thể gimme kết quả tôi muốn, đã cố gắng hiểu điều này cả ngày, xin giúp
Đây là cách tốt hơn, 'if isinstance (sqs, EmptySearchQuerySet): trả về sqs' thực hiện sau lệnh gọi' super() 'và xóa tất cả' is_valid() ' – nitely