2011-12-13 102 views
6

我有一個窗體,輸入數據到數據庫。 我有另一種形式的下拉字段,它使用第一種形式輸入的數據。Django窗體重新加載數據

因此,當我從第一個窗體提交數據時,數據庫已正確更新。 但是,當我加載第二種形式的下拉列表不會更新最新的數據。

步驟隨後用於調試

的問題是不與交易/提交等 檢索數據爲下降第二形式下該查詢是正確的。

的問題不是視圖緩存或者(COS,我們沒有任何的緩存中間件) 我也試過緩存裝飾像@ never_cahce,@ cache_control等

我試着給排在第二形式的打印語句。 我相信問題是與表單緩存。 每個django表單只加載一次,即。同時加載網站的第一頁。 之後表單從此緩存中加載。

第一頁

形式

class AddOrganization(forms.Form): 

    orgList = getOrgUnitList()  

    orgUnit = forms.CharField(label=u'Organization Name', 
           max_length=50, 
           error_messages={'required':'Organization name is required field.'}) 

    parentOrg= forms.ChoiceField(label=u'Parent Organization', 
          choices=[(u'Select',u'Select')]+orgList, 
          error_messages={'required':'Organization name is required field.'}) 

第二頁

形式

class AddUser(forms.Form):  

    orgUnitList = getOrgUnitList()   

    email = forms.EmailField(label=u'Email', 
          max_length=50, 
          error_messages={'required':'Email is required field'}) 

    orgUnit = forms.ChoiceField(label=u'Organizational Unit', 
         choices=orgUnitList,       
           error_messages={'required':'Organizational unit is required field'})  

查詢

def getOrgUnitList(): 
    orgUnitList = list(OrganizationUnit.objects.values_list('OrgUnitID','OrgUnitName').order_by('OrgUnitName')) 
    return orgUnitList 

編輯

一切的一切都很好,如果我使用modelforms.Why所以呢?

+0

你能告訴我們一些代碼示例嗎?注:您必須從第一個窗體重新加載/獲取數據庫中的數據,這需要在第二個窗體的下拉菜單中顯示。 – c4urself

+0

我們只是凡人 - 請提供實際的代碼,否則我們只是在猜測這個問題。這個查詢究竟在哪裏?你肯定它正在執行?即使你是積極的,向我們展示! –

回答

6

問題是orgUnitList作爲窗體中的類屬性聲明。這意味着它在表單最初定義時調用一次。因此,在服務器進程重新啓動之前,不會看到新的元素。解決這個問題

的一種方法是調用形式的__init__方法裏面getOrgUnitList功能:

class AddOrganization(forms.Form): 
    ... 
    def __init__(self, *args, **kwargs): 
     super(AddOrganizationForm, self).__init__(*args, **kwargs) 
     self.fields['orgUnit'].choices = getOrgUnitList() 

或者,你應該考慮使用ModelChoiceField爲ORGUNIT,因爲它有這樣的事情交易自動。

+0

謝謝。 (\ * _ \ *) – Jibin