2011-01-02 10 views
5

मान लीजिए कि मैं एक मॉडल बनाना और अपडेट करना चाहता हूं। कौन से फ़ील्ड प्रदर्शित होते हैं और सत्यापन का प्रकार क्रिया (निर्माण या अद्यतन) पर निर्भर करता है। लेकिन वे अभी भी एक ही सत्यापन और functality साझा करते हैं। क्या मॉडलफॉर्म को संभालने का एक साफ तरीका है (केवल अगर इंस्टॉलेशन हर जगह मौजूद है) या मुझे बस दो अलग-अलग मॉडल फॉर्म बनाना चाहिए?Django डिज़ाइन पैटर्न - मॉडल बनाने और अपडेट करने के लिए फॉर्म

उत्तर

4

दो संभावनाएं वसंत को ध्यान में रखती हैं। तुम्हें पता है, प्रपत्र के __init__ विधि में एक विशेषता सेट कर सकते हैं या तो एक पैरामीटर के आधार पर आप स्पष्ट रूप में पारित, या self.instance मौजूद है या नहीं पर आधारित है और एक गैर कोई नहीं पी है:

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     # either: 
     self.edit = kwargs.pop('edit', False) 
     # or: 
     self.edit = hasattr(self, instance) and self.instance.pk is not None 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     # now modify self.fields dependent on the value of self.edit 

अन्य विकल्प आपके modelform उपवर्ग है - बेस क्लास में संयुक्त कार्यक्षमता रखें, फिर उप-वर्गों में विशिष्ट बनाएं या अद्यतन कार्यक्षमता रखें।

+0

शांत, यही वह भी था जो मैं सोच रहा था। यह सोच रहा था कि ऐसा करने का कोई बेहतर तरीका था, लेकिन यह मेरे लिए अच्छा लग रहा है। – killerbarney

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