我正在尝试使用django haystack创建自定义搜索表单,我只是从haystack的文档中修改:
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
Run Code Online (Sandbox Code Playgroud)
至 :
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
Run Code Online (Sandbox Code Playgroud)
haystack .urls:
urlpatterns = patterns('haystack.views',
url(r'^$', search_view_factory(view_class = SearchView, form_class = CustomSearchForm), name='haystack_search'),
)
Run Code Online (Sandbox Code Playgroud)
当我去网址时,它说:/ error /中的AttributeError
'CustomSearchForm'对象没有'cleaning_data'属性
你们能帮助我吗?谢谢
然后我尝试评论搜索方法,但是当我在自定义字段中提交一个单词时,结果总是一无所获,只有当我向非自定义字段提交单词时,它才能给我想要的结果,已经尝试理解这个整天,请帮忙
小智 9
我知道这是一个有点老问题,但是为了帮助那些可能正在查看这个并想知道同样事情的人,这就是我在相同情况下工作的方式.
这些方面的东西:
...
def search(self)
sqs=super(MyFooSearchForm, self).search()
if self.is_valid() and self.cleaned_data['foo']:
sqs = sqs.filter(foostuff__exact=self.cleaned_data['foo'])
return sqs
Run Code Online (Sandbox Code Playgroud)
基本上,我在self.cleaned_data ['']之前添加了'self.is_valid和'这为我摆脱了错误.希望这可以帮助.
所以,
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
Run Code Online (Sandbox Code Playgroud)
会成为:
def search(self):
sqs = super(CustomSearchForm, self).search()
if self.is_valid() and self.cleaned_data['post_by']:
sqs = sqs.filter(content = self.cleaned_data['post_by'])
if self.is_valid() and self.cleaned_data['title']:
sqs = sqs.filter(content = self.cleaned_data['title'])
if self.is_valid() and self.cleaned_data['content']:
sqs = sqs.filter(content = self.cleaned_data['content'])
if self.is_valid() and self.cleaned_data['date_added']:
sqs = sqs.filter(content = self.cleaned_data['date_added'])
return sqs
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法来做到这一点,我是django/python的相对初学者,但它对我有用.
| 归档时间: |
|
| 查看次数: |
3036 次 |
| 最近记录: |