2015-02-06 7 views
5

के साथ गतिशील रूप से इनपुट फ़ील्ड जोड़ें मुझे पूरा यकीन नहीं है कि इस मामले से कैसे संपर्क करें। मुझे आशा है कि मैं वहां जाऊंगा।wtforms

उदाहरण के लिए मेरे पास एक पृष्ठ पर पते से भरा एक टेबल है। इनकी गिनती गतिशील है (5 या 10 या कोई अन्य गिनती हो सकती है)। और मैं उन्हें एक पृष्ठ पर संपादित करने की संभावना चाहता हूं।

मेरे दृष्टिकोण से एक का पता संपादित करें और इसे एक jinja2 में गुणा करने के लिए for loop और html propertys name और id itereation से loop.index0 से संलग्न करने के wtforms के साथ एक फार्म बनाने के लिए किया गया था, तो मैं डेटा की प्रत्येक पंक्ति निकाल सकते हैं मैन्युअल रूप से और इसे मेरे फॉर्म में वापस रख दें, जब मैं इसका मूल्यांकन करना चाहता हूं।

तो इस उदाहरण के लिए फार्म होगा:

class AdressForm(Form): 
    name = TextField() 

तो अब मेरे टेम्पलेट aproach की तरह निम्नलिखित (एक इनपुट फ़ील्ड पर टूट) दिखता है:

{% for address in addresses %} 
    {{ forms.render_field(addressform.name, id = "name_" ~ loop.index0, 
          name = "name_" ~ loop.index0, value = address.name) }} 
{% endfor %} 

(forms.render_field है wtforms के फ़ील्ड फ़ंक्शन में सही वर्ग निर्दिष्ट करने के लिए बस एक मैक्रो। जैसे कि वे कई ट्यूटोरियल में उपयोग करते हैं)

तो यह काम नहीं कर रहा है, क्योंकि आपको पार नहीं कर सकतेमैन्युअल रूप से फ़ील्ड फ़ंक्शन पर पैरामीटर, क्योंकि wtforms intial form के variblename से name HTML-paramter बनाते हैं।

तो ऐसे प्रपत्र के नाम पर उपसर्ग या पोस्टफिक्स जोड़ने का कोई तरीका है जिसे मैं प्रस्तुत करना चाहता हूं। या यह एक एक्सवाई-समस्या है और मेरा दृष्टिकोण पूरी तरह गलत है।

या मैं यह सब सादे करना अपने आप से है

उत्तर

12

WTForms (मैं वास्तव में इस से बचने की कोशिश) एक मेटा-क्षेत्र FormField कहा जाता है और एक अन्य मेटा-क्षेत्र FieldList कहा जाता है। ये दोनों एक साथ संयुक्त आप मिल जाएगा क्या आप चाहते हैं:

class AddressEntryForm(Form): 
    name = TextField() 

class AddressesForm(Form): 
    """A form for one or more addresses""" 
    addresses = FieldList(FormField(AddressEntryForm), min_entries=1) 

AddressesForm में कोई प्रविष्टियां के लिए, बस शब्दकोशों की एक सूची का उपयोग करें: उप से अधिक

user_addresses = [{"name": "First Address"}, 
        {"name": "Second Address"}] 
form = AddressesForm(addresses=user_addresses) 
return render_template("edit.html", form=form) 

फिर, अपने टेम्पलेट में, बस पाश -forms:

{% for address_entry_form in form.addresses %} 
    {{ forms.render_field(address_entry_form.name) }} 
{% endfor %} 

WTForms स्वचालित रूप से नाम और आईडी सही ढंग से उपसर्ग जाएगा, ताकि जब आप पोस्ट डेटा का बैकअप तुम सिर्फ form.addresses.data प्राप्त करने में सक्षम हो सकता है और वापस की एक सूची मिल जाएगा अद्यतन डेटा के साथ शब्दकोश।

+0

Thx, यह काम कर रहा है। केवल 'नाम' नामक फ़ॉर्म तत्व के साथ नहीं। कुछ कोशिश और त्रुटि 'address_entry_form.name' हमेशा फील्डनाम/आईडी – muthan

+0

ओह के उपसर्ग द्वारा और 'टाइप' के साथ एक ही समस्या – muthan

+0

क्या इसे अनुकूलित करने का कोई तरीका है ताकि मैं टेम्पलेट्स के माध्यम से फ़ील्ड्स जोड़ सकूं? मैं किसी उपयोगकर्ता को + बटन पर क्लिक करने की अनुमति देना चाहता हूं और फ़ील्डलिस्ट में एक और फ़ील्ड जोड़ना चाहता हूं। –

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