2013-07-12 36 views
0

我有如下開頭Django視圖:Django ModelFormSet用完了我所有的內存嗎?到內存泄漏的類似

def MyView(request): 
    formset = MyModelFormSet(request.POST) 
    ... 

顯然,是比我展示什麼看法更多的代碼。我的問題特定於MyModelFormSet。我的問題是Django在調用視圖時正在使用所有內存*。

MyModelFormSet是否可能從數據庫中提取每個「MyModel」?我需要爲MyModelFormSet提供queryset參數嗎?

*這在技術上不是內存泄漏,但它最初看起來像是我之一,因此將其稱爲內存泄漏可以幫助其他人找到這個問題和解決方案。

回答

1

對不起回答我自己的問題。我無法在其他地方找到明確指出的信息,並希望這個Q/A對其他人有幫助。

MyModelFormSet正在從數據庫中提取每個「MyModel」。我在數據庫中有15,000個MyModel的測試環境中驗證了這一點。我觀察到以下內容:

1)我僅在HTTP帖子中提交了3個MyModels表單。之後:

2)formset.forms包含3 MyModelForm s。

3)len(formset._queryset)等於15,000。 formset._queryset包含數據庫中每個MyModel的列表。 Django已經將每個MyModel都拉出來並存儲在內存中。

解決方案是提供一個queryset參數。您可以在Django documentation中閱讀更多關於此的內容。

這個測試是用Django 1.4.5版進行的。