0

使用 django,我试图从另一个 QuerySet 获取 FK 关系的 QuerySet。

也就是说,给定这样的关系: ParentTable (ParentID)ChildTable(ChildID, ParentID

我有一个特定的 QuerySet children = Child.objects.filter(**some_filters) ,我需要一个 QuerySet 用于 QuerySet 中Parent“引用”的对象children

我最初的想法是只使用,像这样: 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 回答