Admin : Éviter les doublons lorsqu’on liste les PASS IAE d’une entreprise#4047
Admin : Éviter les doublons lorsqu’on liste les PASS IAE d’une entreprise#4047francoisfreitag merged 1 commit intomasterfrom
Conversation
24dca53 to
8102851
Compare
itou/approvals/models.py
Outdated
|
|
||
| return ( | ||
| self.filter(user__job_applications__to_company=company_id) | ||
| self.filter(Exists(JobApplication.objects.filter(approval=OuterRef("pk"), to_company=company_id))) |
There was a problem hiding this comment.
De ce que je comprend ça va faire la sous-requête pour chaque ligne donc dans le cas présent ça serait pas plus efficace d'utiliser d'un IN ?
| self.filter(Exists(JobApplication.objects.filter(approval=OuterRef("pk"), to_company=company_id))) | |
| self.filter(pk__in=Subquery(JobApplication.objects.filter(to_company=company_id).values("approval"))) |
There was a problem hiding this comment.
Et bien... c’est équivalent 😂
Le EXPLAIN de DjDT donne le même plan d’exécution, peu importe la forme. J’ai inclus la requête dans les deux cas, où on voit bien soit le IN soit le EXISTS(). Je suppose que PostgreSQL est malin et prend l’opération la plus efficace pour réaliser la requête, peu importe la forme demandée.
J’ai préféré ta version qui me semble effectivement plus simple 👍
There was a problem hiding this comment.
Yep mais à mon avis ça dépend aussi de ce que tu lui demandes à coté, là c'est probablement lié à l'annotation assigned_company qui tape sur la même table et donc il optimise le travail, sur un truc plus simple c'est pas dit.
8102851 to
ff5a016
Compare
🤔 Pourquoi ?
Si un candidat avait émit plusieurs candidatures vers une entreprise, son PASS était listé une fois par candidature.
🍰 Comment ?
Exists🏝️ Comment tester
Comparer
/admin/approvals/approval/?assigned_company=11919&o=2.-6entre la prod et cette branche.