2

私は次のテーブル構造を持っています:

menu --{ page --{ title

メニューからフェッチ関連のページを取得したいと思います。ページにも関連するタイトルがあります。次のコードは私が望むとおりに機能しますが、forループは反復ごとに個別のクエリを生成します。

最初のクエリのprefetch_relatedは、タイトルをフェッチしていないようです。クエリの数を減らすためにこれを行うためのより良い方法はありますか?

 menu_data = MenuOrder.objects \
            .filter(menu__name=kwargs['menu']) \
            .filter(page__title_set__language=language) \
            .prefetch_related('page') \
            .order_by('priority')

    for menu_obj in menu_data:
        title_obj = menu_obj.page.title_set.get()

前もって感謝します、

4

2 に答える 2

3

あなたはで試すことができます:

.prefetch_related('page__title')

プリフェッチ関連のドキュメントの引用

以下はすべて合法です。

Restaurant.objects.prefetch_related('pizzas__toppings')

また、クエリを減らすよりも、使用する必要があることを忘れないでくださいselect_related

于 2012-12-16T00:02:20.790 に答える
0

関係を逆にすると、クエリの数が大幅に減少することがわかりました。

title_data = Title.objects \
    .filter(language=language) \
    .filter(page__menuorder__menu__name=kwargs['menu']) \
    .order_by('page__menuorder__priority')

もっと良い方法があるかどうかわからないので、今のところこれを受け入れます。見てくれたみんなに感謝します。

于 2012-12-17T13:13:28.303 に答える