以下の結果は4 dbヒットになります。 3行目& 4は、2行目でフィルタリングしたものだけをフィルタリングしているので、変更する必要がありますので、dbに再度ヒットしません。Djangoの_setsを最適化してクエリを減らす
page = get_object_or_404(Page, url__iexact = page_url)
installed_modules = page.module_set.all()
navigation_links = installed_modules.filter(module_type=ModuleTypeCode.MODAL)
module_map = dict([(m.module_static_object.key, m) for m in installed_modules])
'installed_modules ='に '.all()'メソッドが含まれているのはなぜですか?さらに、なぜあなたは辞書を作っていますか?このコレクションでさらに何が起こるでしょうか? –
@ S.Lottこれははるかに大きな機能の一部です。何が後になるのかにかかわらず、私はこれらの行を最適化しようとしているので、dbを2回以上ヒットしません。一度ページオブジェクトをつかんで、関連するモジュールをそのページにつかみます。次に、関連セットを使ってdictなどを構築することができます。私はこのページに関連するすべてのモジュールを取得するためにallを使用しています。しかし、それが不要な場合は、削除します。 – Brenden
'navigation_links = installed_modules.filter(module_type = ModuleTypeCode.MODAL)について.select_related( 'module_static_object__key')'? [select_relatedについて詳しくはこちら](https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related) – danihp