2011-09-07 2 views
0

context_processors에서 호출 된 choiceField가있어 내 사이트의 모든 페이지에 나타날 수 있습니다. 데이터베이스에있는 프로젝트를 제공합니다. 문제는 제대로 새로 고쳐지지 않는다는 것입니다. 데이터베이스의 일부 레코드를 삭제했지만 여전히 내 레코드에 있습니다. 또한 사용자가 새 프로젝트를 만들 때 자동으로 새로 고침하고 싶습니다.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 : 첫 번째 부분은 이동 project_choices위한

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 쿼리입니다. Project.objects.all()에서'p에 대해 같은 결과를 준다. – Johanna

답변

3

내부 INIT 그래서이 폼이 호출되면, 그 다음 업데이트한다 생성 새로 고침.

+0

나는 다음과 같이 시도했다 :'super (SelectForm, self) .__ init __ (* args, ** kwargs) project_choices = [(p.proj_id, p.proj_name + "_"+ p.proj_description)을 입력하십시오. init.project.objects.all()에서 p에 대해 self.fields [ 'project']. 그리고 나서'project = forms.ChoiceField()'를 호출하십시오. 그리고 이제는 choiceField – Johanna

+0

에 아무것도 표시하지 않습니다. self.fields [ 'project']를 추가해야합니다. choices = project_choices – JamesO

+0

좋아요, 그것은 작동하는 것 같습니다. 감사 – Johanna

관련 문제