Draft: Ajoute get_queryset
dans ModelSearch
#774
No reviewers
Labels
No labels
devtype -- backend
devtype -- docs
devtype -- frontend
devtype -- user interface
difficulty -- easy
difficulty -- hard
difficulty -- normal
Doing
domain -- bda
domain -- bds
domain -- cof
domain -- core
domain -- kfet
Good first issue
priority -- high
priority -- low
priority -- medium
priority -- staff-wanted
status -- development
status -- discussion
status -- need review
status -- production
status -- ready to merge
status -- todo
To Do
type -- bug
type -- hygiene
type -- improvement
type -- new feature
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: DGNum/gestioCOF#774
Loading…
Reference in a new issue
No description provided.
Delete branch "bclement/autocomplete-queryset"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Quand on utilise les vues d'auto-complétion, on a la possibilité de
configurer des filtres avec
get_queryset_filter
, mais pas d'autrestransformations sur le queryset. Notamment, cela signifie que pour les
vues qui utilisent des
ForeignKey
, on ne peut pas spécifier deselect_related
pour éviter des requêtes inutiles et répétées lors durendering des vues.
Ce patch ajoute une méthode
get_queryset
, en suivant la conventionhabituelle de Django, permettant cette configuration, et l'utilise pour
appeler
select_related
de façon appropriée dans les vues qui enbénéficient.
À priori, cela devrait permettre de compenser la potentielle perte de
performance de !469, qui a supprimé les
select_related
lors de lasélection des participants.
Attention, je n'ai pas testé ce code car je n'ai pas réussi à installer un environnement de développement sur ma machine (c'est-à-dire que j'ai arrêté d'essayer au bout de plusieurs erreurs). Je fais une MR pour que le code soit visible. Si quelqu'un veut tester, iel est lea bienvenue; sinon, je le ferai le jour où j'ai un environnement de dév qui marche.
2 remarques :
ça ne marche pas : il y a un problème d'initialisation dans
ParticipantAutocomplete
parce que la fonction__init__
a besoin deself.q
, qui n'est pas encore définiNotre utilisation de
dal.select2
est probablement obsolète : Django supporte maintenant ça nativement dans l'interface admin (voir ce lien).Intéressament, il y a la phrase
Sometimes you don’t want to incur the overhead of selecting all the related instances to display in the dropdown.
: je pense que cela implique que Django se charge desselect_related
à notre place ?@bclement est-ce que je peux rebaser sur !475 et terminer le patch ?
Go ahead
Merci
pourquoi
self.get_queryset().model
et pasself.model
?On a le problème suivant :
Dans
ModelSearch
on appelle d'abord la méthodeget_queryset()
pour obtenir le queryset des objects dans lesquels on veut chercher, puis dans la méthode.search(keywords)
on applique des filtre supplémentaires et on renvoie le résultat de la rechercheDans
Select2QuerySetView
c'est l'inverse : la classedal.autocomplete.Select2QuerySetView
attend le résultat "final" de la recherche comme valeur de retour deget_queryset
Je propose de se calquer sur le comportement de
dal
: la méthodeget_queryset
renvoie le résultat de la rechercheah mais ça pue parce que du coup on n'a plus accès aux keywords…
Ah oui ça me revient; j'avais essayé de faire ça et c'est un gros clusterfuck en fait… Genre ça serait plus simple de juste avoir un
my_get_queryset
parceque en fait là c'est utilisé de façon incompatible par les 2 et c'est pas pratique…Ou alors, d'avoir une surcouche comme le truc qui gère plusieurs autocomplete (je me souviens plus du nom) plutôt qu'un mixin ?
J'avais fait la remarque je sais plus où mais est ce qu'on a encore vraiment besoin des vues python de
dal
? Il me semble que c'était uniquement utilisé dans l'interface admin, mais elle supporteSelect2
nativement maintenant il me semble...Ah ça serait une solution ça :)
Sinon @mpepin en fait
ModelSearch
c'est un truc complétement custom iirc? Du coup le quick fix c'est juste d'appeler autrement leget_queryset
, genreget_model_queryset
, ouget_base_queryset
,get_unfiltered_queryset
, something.Oui c'est complètement custom, et j'aime bien
get_base_queryset
👍Je vais d'abord regarder la solution de @lstephan et sinon je ferai ça
mentioned in merge request !476
Du coup on prend !476 et plus besoin de rajouter cette feature à
ModelSearch
?On va faire ça du coup
Pull request closed