2010-10-19 15 views
61

मॉडल में मॉडल को 'editable=False' के रूप में चिह्नित किया गया है, लेकिन मैं व्यवस्थापक पृष्ठ को प्रदर्शित करना चाहता हूं। वर्तमान में यह पूरी तरह से क्षेत्र को छुपाता है .. यह कैसे प्राप्त किया जा सकता है? आप क्षेत्र व्यवस्थापक लेकिन गैर संपादन योग्य अन्य सभी स्थानों में संपादन योग्य रखना चाहते हैंDjango व्यवस्थापक: मॉडल में संपादन योग्य = गलत 'के रूप में चिह्नित फ़ील्ड को कैसे प्रदर्शित करें?

उत्तर

132

उपयोग Readonly Fields। जैसा तो (Django> = 1.2 के लिए):

class MyModelAdmin(admin.ModelAdmin): 
    readonly_fields=('first',) 
+3

+1। विशेष रूप से यदि आप व्यवस्थापक में फ़ील्ड को संपादित करने की योजना बनाते हैं। –

12

अद्यतन

यह समाधान उपयोगी है। यदि आप फ़ील्ड को गैर-संपादन योग्य पूरे पर रखना चाहते हैं तो @Till बैकहॉस 'answer बेहतर विकल्प है।

मूल उत्तर

एक तरह से यह करने के लिए व्यवस्थापक में एक कस्टम ModelForm उपयोग करने के लिए किया जाएगा। यह फ़ॉर्म संपादन योग्य बनाने के लिए आवश्यक फ़ील्ड को ओवरराइड कर सकता है। इस प्रकार आप editable=False हर जगह लेकिन व्यवस्थापक को बनाए रखते हैं। उदाहरण के लिए (Django 1.2.3 के साथ परीक्षण)

# models.py 
class FooModel(models.Model): 
    first = models.CharField(max_length = 255, editable = False) 
    second = models.CharField(max_length = 255) 

    def __unicode__(self): 
     return "{0} {1}".format(self.first, self.second) 

# admin.py 
class CustomFooForm(forms.ModelForm): 
    first = forms.CharField() 

    class Meta: 
     model = FooModel 
     fields = ('second',) 

class FooAdmin(admin.ModelAdmin): 
    form = CustomFooForm 

admin.site.register(FooModel, FooAdmin) 
+0

यह काम नहीं करता है, कम से कम Django 1.6 प्रपत्र व्यवस्थापक पैनल में सही ढंग से प्रदर्शित किया जाता है पर, लेकिन जब मैं एक फार्म के बचाने के लिए और फिर से रूपों में यह करने के लिए वापस, मान फिर से डिफ़ॉल्ट है। – Euphorbium

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

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