2013-07-13 4 views
15

का उपयोग करके चयन क्षेत्र में डिफ़ॉल्ट मान सेट करना, मैं एक उत्पाद संपादन फ़ॉर्म बना रहा हूं और मुझे पिछले डेटा के साथ पूर्व-जनसंख्या के रूप में फ़ॉर्म की आवश्यकता है।wtforms और flask

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

ध्यान में रखते हुए:

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

मुद्दा SelectField साथ है

मैं निम्नलिखित कर रहा हूं।

मुझे लगता है कि एक 'डिफ़ॉल्ट' मान है जिसे मैं SelectField पर सेट कर सकता हूं। हालांकि, यह फॉर्म परिभाषा वर्ग में होता है और वहां मेरे पास अभी तक sqlalchemy से क्वेरी ऑब्जेक्ट नहीं है।

तो, रन टाइम पर चुनिंदा क्षेत्र पर डिफ़ॉल्ट रूप से जोड़ने का कोई तरीका है?

+1

'form.category.data = 1' या' form.category.data = 2' – falsetru

+1

मैंने कोशिश की। काम नहीं कर रहा। – kfk

+2

यह falsetru के रूप में है, लेकिन सेट के रूप में सेट कोर के रूप में: 'श्रेणी = SelectField ('श्रेणी', पसंद = [(1, 'एक'), (2, 'दो')], coerce = int)'। फॉर्म उत्पाद प्रपत्र उदाहरण है। –

उत्तर

16

आप सेट डिफ़ॉल्ट मान फार्म के साथ पेज रेंडर करने के लिए चाहते हैं तो आप ही रूप बना सकते हैं या सेट मान:

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 

आप अनुरोध पर सेट डिफ़ॉल्ट प्रपत्र डेटा चाहते हैं:

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 
8

WTForms प्रलेखन से

ध्यान दें कि विकल्प कीवर्ड केवल ताकि आप एक गतिशील ड्रॉप-डाउन सूची बनाना चाहते हैं, तो आप के बाद क्षेत्र के लिए विकल्प सूची प्रदान करना चाहते हैं जाएगा एक बार मूल्यांकन किया जाता है, इन्स्टेन्शियशन।

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

और फिर अपने ध्यान में रखते हुए कहते हैं कि

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

अधिक विस्तार मिली: http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.SelectField

संबंधित मुद्दे