2010-08-21 13 views
6

एक उपclassed ModelAdmin फ़ील्ड में कस्टम आइटम जोड़ें, यानी यह सभी डिफ़ॉल्ट और केवल कुछ अतिरिक्त रखता है।django ModelAdmin फ़ील्ड का विस्तार करें और डिफ़ॉल्ट रखें

(मैं मैं सभी डिफ़ॉल्ट अपने आप को वापस जोड़ सकता है पता है, लेकिन एक अच्छे रास्ते के लिए उम्मीद कर रहा था)

उत्तर

0

untested है, लेकिन काम कर सकते हैं:

class MyAdmin(BaseAdmin): 
    fieldsets = BaseAdmin.fieldsets + (...) 

यह (अगर यह काम करता है) जोड़ना होगा विरासत वाले लोगों के बाद अन्य फ़ील्ड।

+0

BaseAdmin.fieldsets इस बिंदु पर खाली है। – second

10

आप get_fieldsets मॉडलएडमिन की विधि ओवरराइड कर सकते हैं।

डिफ़ॉल्ट कार्यान्वयन इस तरह दिखता है:

def get_fieldsets(self, request, obj=None): 
    "Hook for specifying fieldsets for the add form." 
    if self.declared_fieldsets: 
     return self.declared_fieldsets 
    form = self.get_form(request, obj) 
    fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj)) 
    return [(None, {'fields': fields})] 

तो आप इस तरह के उदाहरण के लिए इसे ओवरराइड कर सकते हैं:

class MyCustomAdmin(ModelAdmin): 
    def get_fieldsets(self, request, obj=None): 
     fs = super(MyCustomAdmin, self).get_fieldsets(request, obj) 
     # fs now contains [(None, {'fields': fields})], do with it whatever you want 
     all_fields = fs[0][1]['fields'] 
     return fs 
0

यहाँ एक कस्टम ModelAdmin वर्ग का विस्तार और एक अतिरिक्त fieldset जोड़ने का एक उदाहरण है।

पहली बार मैंने कोशिश की, मैंने "अगर नहीं ..." चेक छोड़ा। हर बार जब मैंने पृष्ठ को रीफ्रेश किया, तो पृष्ठ पर अतिरिक्त अनुभाग दोहराए गए।

class GISDataFileAdmin(admin.ModelAdmin): 
    # abbreviated version of detailed fieldsets (one fieldset named 'Datafile Info') 
    fieldsets = [('DataFile Info', {\ 
       'fields': ('datafile_id', 'datafile_label', 'datafile_version')\ 
       }),] 

class ShapefileSetAdmin(GISDataFileAdmin):  

    # extend fieldsets in GISDataFileAdmin 
    def get_fieldsets(self, request, obj=None): 

     # get fieldset(s) from GISDataFileAdmin 
     # 
     fs = super(ShapefileSetAdmin, self).get_fieldsets(request, obj) 

     # pull out the fieldset name(s) e.g. [ 'DataFile Info'] 
     # 
     section_names = [ x[0] for x in fs if x is not None and len(x) > 0 and not x[0] == ''] 

     # check if new fieldset info has been added 
     # if not, add the new fieldset 
     # 
     if not 'Shapefile Info' in sections_names: 
      # Add new info as the top fieldset 
      fs = [ ('Shapefile Info', { 
       'fields': ('name', ('zipfile_checked', 'has_shapefile')) 
        })] + fs 
     return fs 
संबंधित मुद्दे