如何使用在上下文处理器(Django 1.3)中包含ChoiceField的HayStack表单?
我有一个非常简单的草垛形状,看起来就像这样:如何使用在上下文处理器(Django 1.3)中包含ChoiceField的HayStack表单?,django,solr,django-haystack,Django,Solr,Django Haystack,我有一个非常简单的草垛形状,看起来就像这样: class BasicSearchForm(SearchForm): category_choices = Category.objects.all() category_tuples = tuple([(c.id, c.name) for c in category_choices]) category = forms.ChoiceField(choices=category_tuples, required=Fal
class BasicSearchForm(SearchForm):
category_choices = Category.objects.all()
category_tuples = tuple([(c.id, c.name) for c in category_choices])
category = forms.ChoiceField(choices=category_tuples, required=False)
def search(self):
sqs = super(BasicSearchForm, self).search()
if self.cleaned_data['category']:
if self.cleaned_data['category'] != "*":
sqs = sqs.filter(category__id=self.cleaned_data['category'])
return sqs
然后我有一个上下文处理器,如下所示:
def search_form(request):
basic_search = BasicSearchForm()
return { 'basic_search': basic_search }
出于某种原因,创建一个新的category对象(通过Django admin并保存它)不会更新我在表单的ChoiceField中使用的category元组,直到我重新启动Apache
有人知道这是什么原因吗
提前谢谢 看看这篇博文,它涉及到你的情况: 但是,这有一个问题。 这样做,选择列表 对于每个字段,将在 启动时间(当您启动 django开发服务器或apache或 lighttpd或nginx或任何你想要的东西 使用)。这意味着如果你添加一个 维护者组的新用户,it 不会出现在维护程序中 字段,直到您重新启动服务器 为了避免这种情况,我们需要添加 使用前的当前可用选项 表单,覆盖默认列表 选择范围: 无论何时启动表单,都要设置选项:
class BasicSearchForm(SearchForm):
def __init__(self, *args, **kwargs):
super(BasicSearchForm,self).__init__(*args,**kwargs)
category_choices = Category.objects.all()
category_tuples = tuple([(c.id, c.name) for c in category_choices])
self.fields['category'] = forms.ChoiceField(choices=category_tuples, required=False)
def search(self):
sqs = super(BasicSearchForm, self).search()
if self.cleaned_data['category']:
if self.cleaned_data['category'] != "*":
sqs = sqs.filter(category__id=self.cleaned_data['category'])
return sqs
啊!我就知道!我忘了给super的init打电话,所以我最终打破了它(当我试图自己定义init时)!谢谢你的回复!我希望这能奏效。这篇文章通过在视图中创建表单后设置选项来实现这一点,但我认为这应该做同样的事情。如果这不符合我的想法,我会编辑这篇文章来关注博客。好运气,很有魅力,非常感谢。我之前也很亲密>_