0

次のように始まる Django ビューがあります。

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

明らかに、私が示したものよりも多くのコードがビューに含まれています。私の質問はMyModelFormSet. 私の問題は、ビューが呼び出されたときにDjangoがすべてのメモリ*を使用していることです。

データベースからMyModelFormSetすべての " " をプルしている可能性はありますか? に引数をMyModel提供する必要がありますか?querysetMyModelFormSet

*これは技術的にはメモリ リークではありませんが、最初はメモリ リークのように思えたので、メモリ リークとして参照すると、他の人がこの質問と解決策を見つけるのに役立つかもしれません。

4

1 に答える 1

2

自分の質問に答えてすみません。この情報は他のどこにも明確に指摘されていませんでした。うまくいけば、この Q/A が他の人に役立つことを願っています。

はい、データベースからMyModelFormSetすべての " MyModel" を取得しています。MyModelデータベースに15,000 の s があるテスト環境でこれを確認しました。私は次のことを観察しました:

1) HTTP 投稿で MyModels フォームを 3 つだけ送信しました。投稿後:

2) formset.forms3MyModelForm秒が含まれます。

3) len(formset._queryset)15,000 に等しい。formset._querysetデータベース内のすべてのリストが含まれMyModelています。Django はすべてMyModelをプルしてメモリに格納しました。

queryset解決策は、引数を提供することです。詳細については、Django のドキュメントを参照してください。

このテストは、Django バージョン 1.4.5 で実行されました。

于 2013-07-12T17:51:04.690 に答える