1

Aという名前のツリーのようなDjangoモデルがあり、これはdjango-mpttによって行われました。

class A(MPTTModel):
    parent = TreeForeignKey('self')

このクラスには自動的に「子」マネージャーがあるため、サブツリーを簡単に取得できます

A への FK リンクを持つ別のモデルがあります。

class SomeModel(models.Model):
    link_to_a = models.ForeignKey(A)

A インスタンスの SomeModel セットを取得したい場合は、次のように実行できます。

a = A.objects.filter(blah)
a.somemodel_set.all()

質問は次のとおりです。Aモデルの下のクエリセットで各インスタンスのsomemodel_setをフェッチする最もpythonicな方法は何ですか。つまり、次の4つの例が必要です。

some_A_instance.children.all().get_all_somemodel_instances()

get_all_somemodel_instances() は、各子のセットの圧縮されたクエリセットを取得する必要があります

4

2 に答える 2

1

1 つのリスト内の関連項目だけが必要ですか、それとも各セットをその親に関連付ける必要がありますか? 前者の場合は、次のようにして一度にすべて取得できます。

related_items = SomeModel.objects.filter(link_to_a=some_A_instance.children.all())

すべてを取得するために単一のクエリ(サブクエリを使用)を実行します。

それ以外の場合は、prefetch_related()すべてのアイテムの関連セットを一度に取得するために使用できます。

items = some_A_instance.children.all().prefetch_related('somemodel_set')
于 2012-12-10T12:43:12.330 に答える
0

これは次のことを行う必要があります。

[child.somemodel_set.all() for child in some_A_instance.children.all()]
于 2012-12-10T12:30:06.033 に答える