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%を占めています。Django:親がクエリに含まれている場合、すべての子を除外するクエリ
私のアプローチは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
@dirkgroten確かに、これは良い点です、私はそれをテストします、ありがとう! – raratiru