2010-07-10 8 views
5

मैं एक Django फार्म के क्षेत्र के लिए अतिरिक्त जानकारी पर पारित करने के लिए कोशिश कर रहा हूँ के रूप में एक टेम्पलेट में प्रदर्शित करने के लिए। मैं निर्माता को ओवरराइड और इस तरह क्षेत्र के लिए एक और संपत्ति जोड़ने की कोशिश की:में अतिरिक्त जानकारी अटैच किया जा रहा क्षेत्रों

self.fields['field_name'].foo = 'bar' 

लेकिन टेम्पलेट इस में:

{{ form.field_name.foo }} 

कुछ भी प्रिंट नहीं किया। किसी को भी सिरे से लिखने/रूपों क्षेत्र कक्षाओं इनहेरिट के बिना एक क्षेत्र के लिए अतिरिक्त जानकारी जोड़ने के बारे में पता है?

+0

संबंधित: http://stackoverflow.com/questions/2270550/warnings-or-even-info-messages-instead-of-only-errors-in-django – guettli

उत्तर

6

django.forms.forms के अनुसार, एक Form की __getitem__() विधि कुछ एक BoundField फील्ड से बाहर बुलाया यह लौटने से पहले, इस प्रकार जो भी परिवर्तन आपके द्वारा किया गया यह अलग करना पैदा करता है। क्या तुम सच में लगता है कि में और अधिक कार्यक्षमता सम्मिलित करना चाहते हैं, तो यह लौटने से पहले बाध्य क्षेत्र के लिए काम करना है कि विधि ओवरराइड:

class MyForm(forms.Form): 
    def __getitem__(self, name): 
     boundfield = super(forms.Form,self).__getitem__(name) 
     boundfield.foo = "bar" 
     return boundfield 

फिर, "bar" उस रूप में सभी क्षेत्रों के लिए दिखाई देगा। तुम भी एक समारोह बनाने के लिए और के बजाय फोन है कि, यह सिर्फ एक हार्ड-कोडेड स्ट्रिंग की तुलना में अधिक बनाने के लिए कर सकते हैं।

हालांकि यह अधिक मानक अधिक क्षेत्रों को जोड़ने के लिए, या प्रपत्र पर ही करने के लिए गुण जोड़ने के लिए, यदि आप जानकारी की एक पूरी नई वर्ग है कि हर क्षेत्र को शामिल करने की जरूरत है है है, यह यह तुम्हारे लिए क्या कर सकते हैं। एक टेम्पलेट में foo तक पहुँचने के लिए फिर

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs) 
     super(forms.Form, self).__init__(*args, **kwargs) 
     self.fields['field_name'].foo = "bar" 

,:


एक और तरीका है एक ही बात पाने के लिए क्षेत्र की एक विशेषता संपादित करने के लिए, तो BoundField के "field" विशेषता द्वारा ही पहुंच है:

{{ form.field_name.field.foo }} 
+1

टी के लिए धन्यवाद वह स्पष्टीकरण। फिर से धन्यवाद - मैं दो दृष्टिकोण के उत्तरार्द्ध की कोशिश की है और यह एक आकर्षण की तरह काम किया। – Max

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