0

django を使用して、別の QuerySet から FK 関係の QuerySet を取得しようとしています。

つまり、次のような関係が与えられます ParentTable (ParentID)ChildTable(ChildID, ParentID

特定の QuerySet があり、QuerySet で「参照」されるオブジェクトchildren = Child.objects.filter(**some_filters) の QuerySet が必要です。Parentchildren

私の最初の考えは、 so: のようにのみを使用することでした Parent.objects.filter(id__in=child.only('parent'))が、SQL クエリを調べると、行に沿って WHERE 句ParentID IN (SELECT subq.ChildID FROM ...が明らかに望ましくない結果をもたらすことがわかります。(唯一のメソッドを調べたところ、ここでの使用が正しくないことが示されているため、この動作は予期されたものです)

目的のクエリは何かParentID IN (SELECT subq.ParentID FROM ...

4

1 に答える 1

1

さて、あなたはあなたの質問に答えました:

これを考慮してください。外部キー参照を作成すると、Django は自動的に逆参照を作成します。これが、子に基づいて結果をフィルタリングできる理由です。さらに、この動作を守りたい場合は、モデル フィールドで Symmetrical=False kwargs を使用して、逆の関係を生成しないようにすることができます。

class Parent(models.Model):
...

class Child(models.Model):
     parent = models.ForeignKey(Parent)

いつでもクエリを作成できます。

Parent.objects.filter(child__in = Childrens.objects.all())
于 2012-10-21T05:15:01.910 に答える