2009-06-29 10 views
7

django व्यवस्थापक में, ऐसे फ़ील्ड हैं जिन्हें मैं एक मॉडल संपादित किया जा रहा है, यदि मैं स्टैंडअलोन संपादित कर रहा हूं। यदि यह इनलाइन है, तो मैं नहीं चाहता कि उन्हें आवश्यकता हो। क्या इसे करने का कोई तरीका है?Django व्यवस्थापक में, क्या मुझे मॉडल में फ़ील्ड की आवश्यकता हो सकती है लेकिन जब यह इनलाइन नहीं है?

उत्तर

16

जबकि डैनियल रोज़मन का जवाब काम करता है, यह सबसे अच्छा समाधान नहीं है। फॉर्म फ़ील्ड को फिर से घोषित करके इसे कोड कोड डुप्लिकेशंस की आवश्यकता होती है। उदाहरण के लिए, यदि आपके पास उस क्षेत्र पर verbose_name था, तो आपको label='My verbose_name already set on model' को CharField लाइन में भी जोड़ना होगा, क्योंकि पूरे क्षेत्र को फिर से घोषित करने से मूल रूप से उस क्षेत्र के लिए आपके मॉडल पर सेट की गई सभी चीज़ों को मिटा दिया जाएगा।

बेहतर दृष्टिकोण प्रपत्र के __init__ विधि ओवरराइड करने के लिए है और स्पष्ट रूप से True या False वहाँ के लिए field.required निर्धारित किया है।

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyModelForm, self).__init__(*args, **kwargs) 

     self.fields['myfield'].required = True 
9

निश्चित रूप से। जरूरी = सही सेट करने के लिए ओवरराइड किए गए अपने आवश्यक फ़ील्ड के साथ एक कस्टम फॉर्म को परिभाषित करें, और इसे अपने व्यवस्थापक वर्ग में उपयोग करें।

class MyForm(forms.ModelForm): 
    required_field = forms.CharField(required=True) 

    class Meta: 
     model = MyModel 

class MyAdmin(admin.ModelAdmin): 
    form = MyForm 


class MyInlineAdmin(admin.ModelAdmin): 
    model = MyModel 

तो यहां MyAdmin ओवरराइड फॉर्म का उपयोग कर रहा है, लेकिन MyInlineAdmin नहीं है।

+0

बहुत बहुत धन्यवाद – Mitch

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