Flask und WTForms

Django, Flask, Bottle, WSGI, CGI…
Antworten
cookie1980
User
Beiträge: 2
Registriert: Mittwoch 14. April 2021, 09:01

Hallo zusammen,

Ich habe ein Problem mit dem 'FieldList' Typ in wtforms. Und zwar habe ich folgendes Szenario:

In meiner forms.py definiere ich folgende Form bzw. FlaskForm:

Code: Alles auswählen

class CostCategoryForm(Form):
    category = SelectField('Kostenstelle', coerce=int, validate_choice=False)
    amount = DecimalField('Betrag')
    
 class JournalEditEntry(FlaskForm):
    bank_account = SelectField('Finanztyp',coerce=int, validate_choice=False)
    entry_date = DateTimeField('Datum', format='%d.%m.%Y')
    amount = DecimalField('Betrag')
    description = StringField('Bemerkung / Erklärung')
    costcategories = FieldList(FormField(CostCategoryForm))
    submit = SubmitField('Speichern')
In meiner routes.py habe ich in einer Funktion folgenden Code:

Code: Alles auswählen

pre_data = {
            'bank_account' : c,
            'entry_date' : jrl.transaction_date,
            'amount' : jrl.amount,
            'description' : jrl.description,
            'costcategories' : [
                 ({'amount' : 40, 'category' : [{'id' : 1, 'label' : 'a'}, {'id' : 2, 'label' : 'b'}  ]}),
                ({'amount' : 20, 'category' : [{'id' : 1, 'label' : 'a'}, {'id' : 2, 'label' : 'b'}  ]})
            ]
        }

form = JournalEditEntry(data=pre_data)

return render_html('template.html', form=form)
Mein Problem ist, dass das SelectField aus 'CostCategoryForm' nicht befüllt wird mit Daten. Ich kann sehen, dass die Werte für 'amount' korrekt eingetragen werden. Hat jemand eine Idee woran das liegen könnte?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du die Werte (`choices`) für ein SelectField später einfügen willst, musst du das `choices` Attribut explizit mit angeben. Ist auch kurz in der Doku erklärt.

Geratene Lösung: ersetz' mal `category` in `pre_data` durch `category.choices`.

Gruß, noisefloor
Antworten