2017-08-31 5 views
0

Say si j'ai un FieldList qui contient deux champs (mais jusqu'à un maximum de 5 entrées autorisées comme ceci:Flask-WTForms- liste des champs Appel entires individuellement dans le modèle

class NameForm(Form): 
    firstname = StringField('firstname') 
    surname = StringField('surname') 

class Combine(Form): 
    combination = FieldList(FormField(NameForm), min_entries=1, max_entries=5) 

Si je veux appeler chaque . entrée individuelle à afficher dans le modèle que je l'ai lu, je dois appeler chacun par son index

dans mon modèle, je l'ai essayé d'appeler comme ceci:

{{ form.description.description-0 }} 

pour wachi je reçois une erreur:

TypeError: type d'opérande non pris en charge (s) pour -: 'str' et 'int'

J'ai aussi essayé les éléments suivants:

{{ form.combination(index="combination-0") }} 

qui ne produit les deux champs pour l'une des les entrées potentielles dans le formulaire de combinaison. Cependant, lorsque je change le nombre en 1, 2 3 ou 4 (pour représenter chacun des index au maximum), l'entrée/l'index affiché à l'écran ne change pas car il est toujours étiqueté combinaison-0 dans l'interface graphique. Est-ce que j'appelle l'index correctement ou si j'aboie juste le mauvais arbre? Merci

Répondre

0

Vous voulez itérer il est fort probable:

{% for entry in form.combination %} 
    {{ entry.form.firstname }} 
    {{ entry.form.surname }} 
{% endfor %} 

Alternativement, si vous devez obtenir la 2ème entrée, vous pouvez faire

{{ form.combination.entries[1].firstname }} 

et similaires.

Notez qu'à moins qu'il y ait des données de formulaire pour créer plus d'entrées, vous obtiendrez une IndexError essayant d'indexer les entrées inexistantes. min_entries=1 garantit seulement au moins une entrée.

Si vous souhaitez ajouter des entrées par programme, utilisez append_entry.