このコードの場合:
people_pool = People.objects.filter(last_name__in = last_names)
for first_name in first_names:
for person in people_pool.filter(first_name = first_name):
# do something with each person.
djangoクエリセットからの私の理解では、データが「必要」になるまでクエリは実際には実行されないため、連鎖クエリセットの最適化が可能になります。しかし、私が間違っていなければ、それはここで私に不利に働くようです。実行される最初のクエリは、基本的に次と同等になります。
People.objects.filter(last_name__in = last_names, first_name = first_name) # for the first first_name in first_names
また、データベースはすべての名について照会する必要があります。この場合、Djangoに実際にを取得させpeople_pool
、取得したpythonオブジェクトに対して後続のフィルターを実行させ、DBをそのままにしておく適切な方法は何ですか?