2012-06-10 48 views
0

我遇到了Django中的一個問題,我想這可能是因爲我沒有正確理解基於類的視圖是如何工作的。django 1.3基於類的視圖 - > FormView,初始化請求之間的結轉?

基本上我有一個ListView和一個FormView。一個是列出對象,另一個是編輯。

在瀏覽器中,如果我從列表視圖導航到現有對象的窗體視圖,我會得到預期的結果:表單字段用期望值填充。

相同的formview用於呈現用戶可以創建對象的空白表單。
如果我從現有對象的窗體導航到新對象的窗體視圖或列表視圖,然後導航到新對象的窗體視圖,則初始(即,CBV的self.initial)預先填充來自現有對象的信息先前訪問的對象。
很顯然,我期待self.initial在新的獲取請求開始時變爲空白。

我的理解是每個請求都會生成一個基於類的視圖的新實例。最初如何跨越請求繼續進行? 我基於一些調試來得出這個結論。下面的get_initial()中的相關行。

def get_initial(self, **kwargs): 
    initial = super(M_EditNewsletterView, self).get_initial(**kwargs)  
    fs_logger.debug('initial immediately after super -> %s' % initial) 

SO建議這是類似的,但我不明白與upvote的答案。 Django(trunk) and class based generic views: one form's initial data appearing in another one's

任何人都可以幫我解釋一下怎麼回事?

回答

1

get_initial只會根據該類的initial屬性返回值。只是一個猜測 - 但你是這樣設置initial

I.e.

class M_EditNewsletterView(FormView): 
    #this value will essentially be constant as it belongs to the 
    #class, not the instance 
    initial = get_my_value() 

你應該自己重寫'get_initial'方法。

def get_initial(self, **kwargs): 
    return get_my_value() 
+0

感謝您的回覆David。很不幸的是,不行。我重寫get_initial ....當前修復問題的方法實際上是將get_initial()中的第一行設置爲initial = {} –