2011-07-16 14 views
6

सेट मैं अपने Django में एक रूप है कि कुछ इस तरह दिखता है:सशर्त दिखाने के लिए और एक फार्म क्षेत्र छिपाने के लिए और क्षेत्र मूल्य

class PersonnelForm(forms.Form): 
    """ 
    Form for creating a new personnel. 
    """ 
    username = forms.RegexField(
     required=True, max_length=30, label=_("Name") 
    ) 
    is_manager = forms.BooleanField(
     required=True, label=_("Is Manager") 
    ) 

मैं अपनी साइट में दो स्थानों पर इस फार्म का उपयोग। स्थानों में से एक, मैं is_manager फ़ील्ड को छोड़कर फॉर्म और उसके सभी फ़ील्ड प्रदर्शित करना चाहता हूं लेकिन मैं इस फ़ील्ड का डिफ़ॉल्ट मान True पर सेट करना चाहता हूं। दूसरी जगह, मैं is_manager फ़ील्ड सहित फॉर्म और उसके सभी फ़ील्ड प्रदर्शित करना चाहता हूं और मैं इसे False.

का डिफ़ॉल्ट मान रखना चाहूंगा, मैं इसे कैसे पूरा कर सकता हूं? लगता है कि यह एक छोटी सी बात है लेकिन मैं इसे समझ नहीं सकता।

धन्यवाद।

उत्तर

12

आप प्रपत्र के __init__ विधि इस्तेमाल कर सकते हैं छिपाने के लिए (या हटाना) क्षेत्र, यानी

class PersonnelForm(forms.Form): 
    """ 
    Form for creating a new personnel. 
    """ 
    username = forms.RegexField(
     required=True, max_length=30, label=_("Name") 
    ) 
    is_manager = forms.BooleanField(
     required=True, label=_("Is Manager") 
    ) 

    def __init__(self, *args, **kwargs): 
     delete_some_field = kwargs.get('delete_some_field', False) 
     if 'delete_some_field' in kwargs: 
      del kwargs['delete_some_field'] 
     super(PersonnelForm, self).__init__(*args, **kwargs) 
     if delete_some_field: 
      del self.fields['is_manager'] 
      # or 
      self.fields['is_manager'].widget = something_else 

#views.py 
form = PersonnelForm(...., delete_some_field=True) 
+0

हाय क्लास। मैंने विजेट को एक छिपे हुए इनपुट में बदल दिया। मैं इसे डिफ़ॉल्ट मान कैसे सौंप सकता हूं? धन्यवाद। –

+0

या तो आप उपयोगकर्ता को "प्रारंभिक" कीवर्ड तर्क क्षेत्र में या उपयोगकर्ता के प्रारंभिक ['फ़ील्ड'] को बदल सकते हैं, मैं हमेशा भूल जाता हूं कि वास्तव में कौन सा काम करता है। –

1

कार्यक्षमताओं अलग हैं, तो आप दूसरे से प्रपत्र के वारिस का उपयोग करें और sutiably प्रदर्शित कर सकते हैं (यानी फील्ड छोड़)।

इसके अलावा, तर्क लेने के लिए फॉर्म की init विधि बनाई जा सकती है, और इसका उपयोग फॉर्म के फ़ील्ड मानों को प्रारंभ करने के लिए किया जा सकता है।

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