のは、私がCity
でWorkplace
Sを照会しましょうと多対多の関係ですべてのWorker
秒、プリフェッチ:私はWorkplace
SのいずれかからWorker
S上の任意のQuerySet
操作を使用している場合プリフェッチされたリレーションシップのQuerySet操作はデータベースにヒットしますか?
workplaces = list(city.workerplace_set.filter(num_employees__lte=350).prefetch_related('Worker'))
を、データベースがヒットするかどうか?私はドキュメントから明確な答えを出すことができませんでした。
workplaces_with_interns = [workplace for workplace in workplaces
# is this filter going to query the database?
if workplace.worker_set.filter(salary=0).exists()]
PS:誰かが、おそらく私は単に代わりにlist
作るのcity.workerplace_set
のクエリを行うことにより、同じ答えに達することができることを指摘しようとしています。はい、私は知っていますが、私はworkplaces
をキャッシングしているので、これはできません。これは、このすべてを行う関数が呼び出されるたびにデータベースがヒットしないようにするためです。
したがって、 'workplace.worker_set.all()'以外のクエリはDBにヒットしますか? – dabadaba