从给定的QuerySet获取FK集

时间:2012-10-21 04:45:06

标签: python django

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

也就是说,给出如下关系: ParentTable (ParentID)ChildTable(ChildID, ParentID

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

我最初的想法是只使用,如下: Parent.objects.filter(id__in=child.only('parent')),但是检查SQL查询会显示出ParentID IN (SELECT subq.ChildID FROM ...行的WHERE子句,这显然会产生不希望的结果。 (检查唯一的方法显示我在这里使用是不正确的,所以这种行为是预期的)

所需的查询将是ParentID IN (SELECT subq.ParentID FROM ...

1 个答案:

答案 0 :(得分: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())