2012-08-23 25 views
25

WTForms के साथ एक SelectField का डिफ़ॉल्ट मान सेट करने का प्रयास करते समय, मैं मान को 'डिफ़ॉल्ट' पैरामीटर में पास करता हूं।आप WTForms SelectField के लिए डिफ़ॉल्ट मान कैसे सेट करते हैं?

class TestForm(Form): 
    test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=2) 

मैंने निम्नलिखित भी कोशिश की है।

class TestForm(Form): 
    test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=(2, "Def")) 

न तो डिफ़ॉल्ट चयनित फ़ील्ड को "Def।" पर सेट करें। यह टेक्स्टफिल्ड जैसे अन्य प्रकार के फ़ील्ड के लिए काम करता है। आप SelectField के लिए डिफ़ॉल्ट मान कैसे सेट करते हैं? '

उत्तर

20

आपके द्वारा पोस्ट किया गया पहला तरीका सही है, और यह मेरे लिए काम करता है। यह काम नहीं कर आप WTForms के एक पुराने संस्करण चला रहे हो सकता है के लिए केवल विवरण है, यह 1.0.1

+1

आप सही कर रहे हैं:

यहाँ यह करने के लिए नया तरीका है। मैं पहले संस्करण चला रहा था। – jan

21

पर मेरे लिए काम किया मेरा मानना ​​है कि इस समस्या को Field के data विशेषता कुछ के साथ default अधिभावी के कारण होता है कि WTForms समझ में नहीं आता है (उदाहरण के लिए एक डीबी मॉडल ऑब्जेक्ट - यह int की अपेक्षा करता है)। यह क्या होगा अगर आप ऐसा जैसे निर्माता अपने फ़ॉर्म आबादी है

form = PostForm(obj=post) 
form.category.data = (post.category.id 
         if page.category 
         else 0) # I make 0 my default 
+1

रनटाइम पर दृश्य से गतिशील रूप से विकल्पों को पॉप्युलेट करते समय, डिफ़ॉल्ट रूप से इसे एक विकल्प चुनने का यह सही तरीका है। चूंकि Google इस प्रश्न पर बहुत से लोगों को लाता है, इसलिए यह संभवतः स्वीकार्य उत्तर होना चाहिए। –

+0

अच्छी तरह से कहा, जवाब के लिए धन्यवाद।यह चयनित उत्तर – JMS

+1

होना चाहिए ठीक है मैंने देखा है कि जब मैं दृश्य में सूची में से किसी एक के साथ डिफ़ॉल्ट विकल्प बदलता हूं और फॉर्म को सबमिट करता हूं तो डिफ़ॉल्ट विकल्प को नए के बजाय सबमिट किया जाता है। इस समस्या को कैसे ठीक किया जा सकता है? – nikitz

11

कुछ तरीकों का उपयोग कर रहे हैं:

form = PostForm(obj=post) 

समाधान मैन्युअल data विशेषता निर्धारित करने के बाद प्रपत्र भर जाने के बाद है यह करने के लिए। आपका पहला कोड स्निपेट वास्तव में सही है।

आप गतिशील रूप से हालांकि एक दृश्य में ऐसा करना चाहते हैं, तो आप भी कर सकते हैं:

form = TestForm() 
form.test_field.default = some_default_id 
form.process() 
3

यह SelectField के साथ एक choices सेटिंग है जब आप एक int उपयोग करें, यह इस तरह से काम करता है:

test_select = SelectField("Test", coerce=int, choices=[(0, "test0"), (1, "test1")], default=1) 

या:

class TestForm(Form): 
    test_select = SelectField("Test", coerce=int) 

@app.route("/test") 
def view_function(): 
    form = TestForm() 
    form.test_select.choices = [(0, "test0"), (1, "test1")] 
    form.test_select.default = 1 
    form.process() 
+1

क्या आपने दूसरे संस्करण का परीक्षण किया है? कॉलिंग 'form.test_select.default = 1' मेरे सिस्टम पर कुछ भी नहीं बदलती है। – Robert

+0

अंत में, कुछ काम करता है !! –

4

Flask-WTF 0.14.2 उपयोगकर्ता यहाँ। तो यह उत्तर किसी के लिए है जिसकी मेरे साथ समान समस्या है।

असल में, पिछले समाधानों में से कोई भी form.validate_on_submit() के साथ ठीक से काम नहीं करता है।

form.test_field.data स्थापना वास्तव में डिफ़ॉल्ट मान बदल जाएगा, जब पेज लोड, लेकिन डेटा रहता हीvalidate_on_submit के बाद (ब्राउज़र में उपयोगकर्ता परिवर्तन कोई प्रभाव नहीं है)।

form.test_field.default सेट करना तो form.process() पर कॉल करें जब पृष्ठ लोड होता है तो मान भी बदलता है, लेकिन validate_on_submit विफल हो जाएगा।

class TestForm(Form): 
    test_field = SelectField("Test", choices=[(0, "test0"), (1, "test1")]) 

@app.route("/test") 
def view_function(): 
    form = TestForm(test_field=1) 
    if form.validate_on_submit(): 
    ...