Djangoのモデルから親のモデルを取ると(select_relatedなどしていないと)1クエリー実行されてしまいます。 以下のように、親のさらに親を取ろうとすると2クエリー実行されます。
me.parent.parent
me.parent
の時点で1クエリー実行されて、 parent.parent
の時点で2クエリー目が実行されます。
各クエリーでは親の全カラムの値も取るので、親の親だけが必要な場合は効率が悪いです。
この場合、以下のように子供の子供のIDを指定して取るように置き換えると1クエリーで取れます。
Grandpa.objects.get(children__children__id=me.id)
ObjectDoesNotExist
とか MultipleObjectReturned
には気をつけて。