Disons que je fais une recherche Workplace
s dans un City
et prefetch tous leurs Worker
s, ce qui est un many-to-many:Est-ce que les opérations QuerySet sur les relations prélectées touchent la base de données?
workplaces = list(city.workerplace_set.filter(num_employees__lte=350).prefetch_related('Worker'))
Si j'utilise de l'un des Workplace
de toute opération QuerySet
sur Worker
s , la base de données sera-t-elle touchée ou non? Je n'ai pas pu trouver une réponse claire des docs.
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: quelqu'un va probablement dire que je peux atteindre la même réponse en faisant simplement une requête pour city.workerplace_set
au lieu d'en faire un list
. Oui, je sais, mais ce n'est pas possible parce que je suis la mise en cache le workplaces
afin que la base de données ne soit pas atteinte à chaque fois que la fonction qui fait tout cela est appelée.
Donc toute autre requête autre que 'workplace.worker_set.all()' touchera la base de données? – dabadaba