2011-02-08 12 views
7

पर पोस्ट प्रपत्र मैं एक साधारण Django फार्म बनाया है, एक (रेडियो बटन में) विकल्पों की सूची के साथ:Django - चयन

class MyForm(forms.Form): 
      choices=forms.ChoiceField(widget=forms.RadioSelect(), choices=[(k,k) for k in ['one','two','three']],label="choose one") 

मैं स्वचालित रूप से प्रस्तुत करने के लिए प्रपत्र चाहते हैं जब कोई उपयोगकर्ता विकल्पों में से एक का चयन करता है । सीधा HTML में मैं

<select name='myselect' onChange="FORM_NAME.submit();"> 
    .... 
    </select> 

के रूप में यह किया है होगा लेकिन मैं कैसे एक टेम्पलेट लिखे बिना प्रपत्र वर्ग में इस एकीकृत करने के लिए पता नहीं है। विशेष रूप से, मुझे FORM_NAME जानने की आवश्यकता होगी ताकि मैं उपरोक्त स्निपेट में FORM_NAME.submit() पर कॉल कर सकूं। क्या यह टेम्पलेट का उपयोग किए बिना किया जा सकता है?

उत्तर

14

मुझे लगता है कि आपको फॉर्म नाम जानने की आवश्यकता नहीं है। अपने प्रपत्र में इस एकीकृत करने के लिए एक attribute to your widget जोड़ने शामिल होगा

<select name='myselect' onChange="this.form.submit();"> 

एक त्वरित समाधान: यह रूप में अच्छी तरह काम करना चाहिए।

widget=forms.RadioSelect(attrs={'onchange': 'this.form.submit();'}) 

अब एक अगर यह बेहतर आपके प्रपत्र परिभाषा से अलग नहीं किया जाता है (अलग परिभाषा, शैली और व्यवहार) बहस कर सकते हैं, लेकिन यह है कि यह करना चाहिए।

+2

इनलाइन ईवेंट एक तत्व विशेषता के रूप में हैंडलिंग? यह अतीत से एक विस्फोट है! यदि आप jQuery को शामिल कर सकते हैं और इसके साथ पकड़ने के लिए जा रहे हैं, तो मैं उस दृष्टिकोण के लिए जाऊंगा, जो आपको फ़ॉर्म को बाध्य करने के पक्ष में आसानी से ऑनचेंज विशेषता को आसानी से छोड़ने की अनुमति देता है, jQuery के माध्यम से चुनिंदा तत्व परिवर्तन ईवेंट में कार्रवाई सबमिट करें "दस्तावेज़ तैयार "घटना। यह बेहतर रूप से दिखाया गया है: '$ (फ़ंक्शन() {$ ('# id_myselect')। बदलें (फ़ंक्शन() {this.form.submit();})});' – trojjer

+0

फिर आप "ऑन चेंज" को हटा सकते हैं एचटीएमएल टैग (आईडी के साथ) इस तरह दिखेगा: