我有一个非常简单的干草堆形式,看起来像这样:
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 }
出于某种原因,创建一个新的类别对象(通过Django管理员,并保存它)将不会更新我在形式的ChoiceField中使用的类别元组,直到我重新启动Apache。
有谁知道造成这种情况的原因是什么?
提前致谢!
答案 0 :(得分:1)
看一下这篇博客文章,它会处理你的情况:
但是,有一个问题。 这样做,选择列表 将生成每个字段 启动时间(当你启动时 django开发服务器或apache或 lighttpd或者nginx或者你是什么 使用)。这意味着,如果你添加一个 它是维护者组的新用户 不会出现在维护者身上 字段,直到您重新启动服务器!
为避免这种情况,我们需要添加 使用前当前可用的选择 表单,覆盖默认列表 选择:
您希望在启动表单时设置选项:
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