使用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 ...
答案 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())