J'ai un formulaire CRUD qui possède un widget de sélection. Les options du widget sont dynamiques. Je ne peux pas utiliser de balises, car les valeurs proviennent d'autres tables. J'essaie de modifier les valeurs dans le contrôleur en utilisant cette méthode :
def change_widget(form, id, widget):
"Tries to find a widget in the given form with the given id and swaps it with the given widget"
for i in range( len(form[0].components) ):
if hasattr(form[0].components[i].components[1].components[0], 'attributes'):
if '_id' in form[0].components[i].components[1].components[0].attributes:
if form[0].components[i].components[1].components[0].attributes['_id'] == id:
form[0].components[i].components[1].components[0] = widget
return True
return False
Après avoir appelé la méthode et inspecté le formulaire, je peux voir que le formulaire a été modifié avec succès. Du côté de la vue, j'utilise une vue personnalisée et j'essaie d'afficher le formulaire comme suit :
{{=form.custom.begin}} {{=form.custom.widget.customized_field}}
{{=form.custom.submit}} {{=form.custom.end}}
Mais le widget original non modifié est toujours affiché. Qu'est-ce que je fais de mal ? Existe-t-il une meilleure façon de procéder ?