core/views.py - Liste des gymnastes ayant besoin d'une mise à jour #21

Closed
opened 2022-01-09 15:41:37 +01:00 by Sulley · 3 comments
Owner

Je souhaite pouvoir afficher aux utilisateurs qui se connectent la liste des gymnastes qui ont besoin d'une mise à jour (parce que ca fait trop longtemps que nous n'avons plus eu de nouvelles d'eux).

Pour l'instant j'utilise ce code :

    limit_date = timezone.now() - timedelta(days=14)
    waiting_update_gymnast = Gymnast.objects.filter(
        Q(mindstate__created_at__gt=limit_date)
        | Q(points__created_at__gt=limit_date)
        | Q(chronos__created_at__gt=limit_date)
        | Q(accident__created_at__gt=limit_date)
        | Q(known_skills__created_at__gt=limit_date)
    ).distinct()

La soucis c'est que la liste contient tous les gymnastes à qui il manque une mise à a jour dans une de ces tables. Or pour moi s'il y a une mise à jour dans une de ces tables, c'est bon. Ce que je veux c'est la liste des gymnastes qui n'a AUCUNE mise à jour dans AUCUNE de ces tables.
Vois-tu la différence ? Sais-tu comment obtenir cela ?

Je souhaite pouvoir afficher aux utilisateurs qui se connectent la liste des gymnastes qui ont besoin d'une mise à jour (parce que ca fait trop longtemps que nous n'avons plus eu de nouvelles d'eux). Pour l'instant j'utilise ce code : ``` limit_date = timezone.now() - timedelta(days=14) waiting_update_gymnast = Gymnast.objects.filter( Q(mindstate__created_at__gt=limit_date) | Q(points__created_at__gt=limit_date) | Q(chronos__created_at__gt=limit_date) | Q(accident__created_at__gt=limit_date) | Q(known_skills__created_at__gt=limit_date) ).distinct() ``` La soucis c'est que la liste contient tous les gymnastes à qui il manque une mise à a jour dans une de ces tables. Or pour moi s'il y a une mise à jour dans une de ces tables, c'est bon. Ce que je veux c'est la liste des gymnastes qui n'a AUCUNE mise à jour dans AUCUNE de ces tables. Vois-tu la différence ? Sais-tu comment obtenir cela ?
Sulley changed title from Liste des gymnastes ayant besoin d'une mise à jour to core/views.py - Liste des gymnastes ayant besoin d'une mise à jour 2022-01-09 15:42:04 +01:00
Author
Owner

Ah ben c'était simple, il suffisait de changer les | par des & ;-)

Ah ben c'était simple, il suffisait de changer les `|` par des `&` ;-)
Author
Owner

ok mais ca marche pas si bien que cela… Parce que la vérifie qu'il y a eu une entrée datée de plus de X jours. Sauf que, si pour un gymnast X, il n'y a pas d'entrée du tout (encore aucune info) le script ne sort pas son nom… Pourtant il devrait !

ok mais ca marche pas si bien que cela… Parce que la vérifie qu'il y a eu une entrée datée de plus de X jours. Sauf que, si pour un gymnast X, il n'y a pas d'entrée du tout (encore aucune info) le script ne sort pas son nom… Pourtant il devrait !
Sulley added the
improvement
label 2022-01-09 16:19:08 +01:00
Collaborator

C'est parce que les filtres fonctionnent comme des jointures internes.

Essaie peut-être en modifiant le .filter(...) par un .exclude(...): tu pars de tes gymnastes, et tu exclus ceux pour lesquels il existe un mindstate dont la date de création est plus petite que, des points dans la date de création est inférieure à, etc.

En gros, une inversion du filtre par une exclusion.
Dans ce cas, les | seront sans doute plus appropriés que les & 😉

C'est parce que les filtres fonctionnent comme des jointures internes. Essaie peut-être en modifiant le `.filter(...)` par un `.exclude(...)`: tu pars de tes gymnastes, et tu exclus ceux pour lesquels il existe un _mindstate dont la date de création est plus petite que_, des _points dans la date de création est inférieure à_, etc. En gros, une inversion du filtre par une exclusion. Dans ce cas, les `|` seront sans doute plus appropriés que les `&` 😉
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Sulley/Ultron#21
No description provided.