Vraag Een standaardwaarde instellen in het selectieveld, met behulp van wtforms en fles


Ik maak een productbewerkingsformulier en ik heb het formulier nodig dat vooraf moet worden ingevuld met de vorige gegevens.

Ik doe het volgende:

Product(form):
    product = TextField('name')
    category = SelectField('category', choice=[(1,'one'),(2,'two')])

In de weergave:

form.product.data = 'A product name from the database'
form.category.data = 'a category name' #This does not work

Het probleem zit hem in het SelectField.

Ik begrijp dat er een 'standaard' waarde is die ik kan instellen op SelectField. Dit gebeurt echter in de form definition-klasse en daar heb ik het query-object nog niet van sqlalchemy.

Dus, is er een manier om een ​​standaard op selectieveld toe te voegen tijdens runtime?


16
2017-07-13 10:26


oorsprong


antwoorden:


Als u standaardwaarde wilt instellen op renderpagina met formulier, kunt u een eigen formulier of ingestelde waarde maken:

class Product(Form):
    product = TextField('name')
    category = SelectField('category', choices=[(1,'one'),(2,'two')])

# create instance with predefined value:
form1 = Product(category=2)
# form1.product == <input id="product" name="product" type="text" value="">
# form1.category == <select id="category" name="category">
#                     <option value="1">one</option>
#                     <option selected value="2">two</option>
#                   </select>
# from1.product.data == None
# form1.category.data == 2

# create own form if it need many times:
Product2 = type('Product2', (Product,), {
    'category': SelectField('category', default=2, choices=[(1,'one'),(2,'two')])
})
form2 = Product2()
# form2.product == <input id="product" name="product" type="text" value="">
# form2.category == <select id="category" name="category">
#                     <option value="1">one</option>
#                     <option selected value="2">two</option>
#                   </select>
# from2.product.data == None
# form2.category.data == 2

Als u standaardformuliergegevens op verzoek wilt instellen:

with app.test_request_context(method='POST'):
    form = Product(request.form)
    # form5.category.data == None

    form = Product(request.form, category=2)
    # form5.category.data == 2

with app.test_request_context(method='POST', data={'category': 1}):
    form = Product(request.form)
    # form5.category.data == 1

    form = Product(request.form, category=2)
    # form5.category.data == 1

17
2017-07-14 09:09



Uit de WTForms-documentatie

Merk op dat het trefwoord keuzes maar één keer wordt geëvalueerd, dus als u een dynamische vervolgkeuzelijst wilt maken, moet u de keuzelijst na het maken van een opmerking aan het veld toewijzen.

Product(form):
    product = TextField('name')
    category = SelectField('category')

En zeg dan volgens jou

form.category.choices = [list of choices with chosen data]

Meer informatie vindt u hier: http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.SelectField


8
2017-07-13 18:54