【发布时间】:2015-03-23 15:40:51
【问题描述】:
我有一个搜索表单,其中有一个可选字段 city_id
我的表格:
class BusinessSearchForm(SearchForm):
def no_query_found(self):
return self.searchqueryset.all()
def search(self):
sqs = super(BusinessSearchForm, self).search()
# if something goes wrong
if not self.is_valid():
return self.no_query_found()
# filter search results
if 'city_id' in self.request.GET: # or POST
sqs = sqs.filter(city_id=self.request.GET.get('city_id'))
else:
sqs = sqs.filter(...)
return sqs
这是我得到的错误:
object has no attribute 'request' error
默认干草堆搜索表单:
class SearchForm(forms.Form):
q = forms.CharField(required=False, label=_('Search'),
widget=forms.TextInput(attrs={'type': 'search'}))
def __init__(self, *args, **kwargs):
self.searchqueryset = kwargs.pop('searchqueryset', None)
self.load_all = kwargs.pop('load_all', False)
if self.searchqueryset is None:
self.searchqueryset = SearchQuerySet()
super(SearchForm, self).__init__(*args, **kwargs)
def no_query_found(self):
"""
Determines the behavior when no query was found.
By default, no results are returned (``EmptySearchQuerySet``).
Should you want to show all results, override this method in your
own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
"""
return EmptySearchQuerySet()
def search(self):
if not self.is_valid():
return self.no_query_found()
if not self.cleaned_data.get('q'):
return self.no_query_found()
sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])
if self.load_all:
sqs = sqs.load_all()
return sqs
def get_suggestion(self):
if not self.is_valid():
return None
return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
view.py
query = ''
results = EmptySearchQuerySet()
args = {}
args.update(csrf(request))
if request.GET.get('q'):
form = form_class(request.GET, searchqueryset=searchqueryset,
load_all=load_all)
if form.is_valid():
query = form.cleaned_data['q']
results = form.search()
else:
form = form_class(searchqueryset=searchqueryset,
load_all=load_all)
....
【问题讨论】:
-
不,表单没有请求属性。是什么让您认为它确实有效?
-
能否提供 SearchForm 类的导入语句?
-
@daniel 每次我将
request添加到表单时,都会收到错误name 'request' is not defined。 -
@justcompile 这是默认的 Haystack 表单
-
@justcompile 我将搜索表单添加到我的 OP 中