, a, , :
>>> 4 = Model1.objects.create(random_field=3, parent=b)
>>> a.model_1.add(e)
>>> [i.pk for i in Model2.objects.filter(Model2.descendants_queryset(b), pk=3)]
[3, 3, 3]
, ...
, , Q()-query descendants_queryset() ORed, , b , ( multple Model1).
SQL Model2.objects.filter(Model2.descendants_queryset(b)), :
>>> Model2.objects.filter(Model2.descendants_queryset(b)).query.sql_with_params()
(u'SELECT "Foo_model2"."id" FROM "Foo_model2" LEFT OUTER JOIN "Foo_model2_model_1" ON ("Foo_model2"."id" = "Foo_model2_model_1"."model2_id") WHERE ("Foo_model2_model_1"."model1_id" = %s OR "Foo_model2_model_1"."model1_id" = %s OR "Foo_model2_model_1"."model1_id" = %s)', (17, 18, 19))
:
SELECT "Foo_model2"."id"
FROM "Foo_model2"
LEFT OUTER JOIN "Foo_model2_model_1"
ON ("Foo_model2"."id" = "Foo_model2_model_1"."model2_id")
WHERE ("Foo_model2_model_1"."model1_id" = 17
OR "Foo_model2_model_1"."model1_id" = 18
OR "Foo_model2_model_1"."model1_id" = 19)
, , q |= Q(model_1=curr_descendant) OR, , ( Model2, ManyToMany Model1),
- . .
pk=3, , PK (3).
Model2 c model1 ManyToMany-reference, :
>>> a2 = Model2.objects.create()
>>> a2.model_1.add(c)
>>> [i.pk for i in Model2.objects.filter(Model2.descendants_queryset(b))]
[3, 3, 3, 4]
Model2 , model1.
, .distinct() .