我有一个Django视图,开头如下:
def MyView(request):
formset = MyModelFormSet(request.POST)
...
显然,视图中的代码多于我所显示的代码。我的问题是针对MyModelFormSet
的。我的问题是Django在调用视图时使用了所有内存*。
MyModelFormSet
是否可能从数据库中提取每个“MyModel
”?我是否需要向queryset
提供MyModelFormSet
参数?
*这在技术上不会是内存泄漏,但它最初对我来说似乎是一个,因此将其称为内存泄漏可能有助于其他人找到这个问题和解决方案。
答案 0 :(得分: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版进行。