Je suis en train de travailler sur le générateur de formulaires de wagtail, le CRM pour django.
Mon objectif est de passer des paramètres qui affectent le rendu du widget en fonction de requêtes SQL: limiter la possibilité de s'inscrire à des "sessions" à un nombre d'élus, les premiers arrivés.
J'ai codé un LimitedChoiceField
, qui prends en choix des valeurs de la forme "valeur:nombre de places", je parse ces valeurs pour n'afficher que "valeur" dans le widget.
Je passe des valeurs sous forme de d'attributs de la classe "widget" à l'initialisation du "field", en ayant pris soin de la copier (deepcopy
). Les données interressantes sont passée dans des attrs de classe _choices_max_count
et _choices_current_count
. (il n'y a pas de **kwargs dans les widgets, c'est con). ces données sont sous la forme {"valeur": count}
, resp. pour le
nombre de places utilisée et ne nombre de places maxi, pour chaque "valeur".
Mon widget est un "LimitedRadioSelect", qui a les méthodes qui vont bien pour afficher les choix "disabled" si nécessaire (le radio est affiché, mais grisé et pas cliquable), quand il n'y a plus de places.
Mon problème est le suivant : Si j'ai plusieurs champs LimitedChoiceField
dans mon formulaire (dynamique, hein, il est construit à la volée), les données _choices_max_count
et _choices_current_count
s'emmèlent les pinceaux, je soupsonne le fait que l'attr widget
soit un attr de classe dans le Field...
Si c'est pas clair, je posterai un gist sur e sujet demain ;) et si vous avez des pistes, je suis preneur !