0
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。但是,我不確定這是否是最有效的解決方案。Django:排除所有子級的查詢,如果父級包含在查詢中
我將不勝感激您的幫助。
更新
我想出了一個解決方案蟒是:
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
@dirkgroten確實,這是一個好點,我會測試它,謝謝! – raratiru