2

この例から続けて、次のような逆クエリを実行したいと思います。

result = Topping.objects.all().prefetch_related('pizza_set')

これは配列の配列を返すと思います。個々の配列内では、pizza に戻る逆ルックアップ自体が配列である必要があります。

result = ['name':'Pineapple', 'pizza_set':[{'name':'Hawaiian'... ... }]]

そのままでは、私のクエリは、pizza_set を介して戻ってきません。私が間違っていることはありますか?

4

1 に答える 1

1

まず、ここには「配列」はありません (Python では「リスト」と呼んでいますが気にしないでください)。への呼び出しの結果all()は、リストのようなコンテナーである QuerySet です。これに含まれるものは、リストではなく、関連する種類のオブジェクト (この場合はToppingインスタンス) です。各インスタンスはデータベースから入力prefetch_relatedされます。リンクで説明されているように、使用のポイントは、関連するセットを呼び出すときに使用されるインスタンスごとに内部キャッシュを作成することです。その属性に直接アクセスする必要はありませんがobj.pizza_set.all()、Topping クエリセット内のアイテムのいずれかを呼び出すと、それが使用されます。これは、データベース ヒットをチェックすることで確認できます。

于 2012-11-28T10:44:34.920 に答える