2011-09-07 58 views
0

我有一个choiceField从context_processors调用,所以它可以出现在我的网站的所有页面。它提供了数据库中存在的项目。问题是它不能正确刷新。 我删除了我的数据库中的一些记录,他们仍然在我的选择。另外,我希望它在用户创建新项目时自动刷新。Django:在选择字段刷新问题

这是我的表格,我怎么称呼它。如果有人有建议,将不胜感激。

forms.py:

class SelectForm(forms.Form): 

     def __init__(self, *args, **kwargs): 
       super(SelectForm, self).__init__(*args, **kwargs) 
       self.fields['project'].initial=[(p.proj_id, p.proj_name+"_"+p.proj_description) for p in Project.getProjectParent(Project())] 


     project_choices = [(p.proj_id, p.proj_name+"_"+p.proj_description) for p in Project.getProjectParent(Project())] 

     project = forms.ChoiceField(project_choices) 

     def save(self): 
       project = self.cleaned_data['project'] 
       src = '' 
       p = {'proj': project, 'src': src} 
       return p 

context_processors.py:

def display_select_proj(request): 
     if request.method == "POST" and (request.POST.get("action", "") == "Change"): 
       form = SelectForm(request.POST) 
       if form.is_valid(): 
         p = form.save() 
         proj = p['proj'] 
         src = p['src'] 

         request.session['proj'] = proj 

     else: 
       proj = request.session['proj'] 
       src = "" 
       form = SelectForm(initial={'project': proj}) 

     return {'select_form': form, 'proj': proj, 'src': src} 
+0

我想你需要给getProjectParent的代码。 –

+0

父项目的代码只是一个sql查询。它给出了'p在Project.objects.all()'中的相同结果' – Johanna

回答

3

对于所述第一部分移动project_choices内部初始化所以它产生作为形式被调用时,它将然后更新刷新。

+0

我试过了:'super(SelectForm,self).__ init __(* args,** kwargs) project_choices = [(p.proj_id,p.proj_name + “_”+ p.proj_description)for Project.objects.all()] self.fields ['project'] .init = project_choices'在init函数中。然后调用'project = forms.ChoiceField()'现在它在choiceField – Johanna

+0

中根本没有给我任何东西,它需要设置为选项add self.fields ['project']。choices = project_choices – JamesO

+0

好,它似乎工作。谢谢 – Johanna