【发布时间】:2017-03-28 14:18:14
【问题描述】:
class Person(TimeStampedModel):
name = models.CharField(max_length=32)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
is_child = models.BooleanField(default=False,)
我正在尝试形成一个查询,如果他们的父母在场,则排除所有孩子。在我的 PostgreSQL 中,孩子们暂时占模型条目的 30%。
我的方法是使用nested query。但是,我不确定这是否是最有效的解决方案。
感谢您的帮助。
更新
我想出的python解决方案如下:
a = Person.objects.filter(...)
ids = [i.id for i in a]
result = [x for x in a if any((not x.is_child, x.parent_id not in ids))]
【问题讨论】:
-
在性能方面,我不明白为什么您不只执行原始查询并从结果中排除 python 代码中的子项。但是测量查询时间可能是最好的判断方法。顺便说一句,您使用嵌套查询的方法在 PostgreSQL 中应该可以正常工作。
-
@dirkgroten 确实,这个点很好,我会测试一下,谢谢!
标签: python django postgresql django-queryset