2013-03-05 9 views
5

मैं केवल कुछ डेटा दिखाने के लिए django व्यवस्थापक के फ़ील्ड में एक फ़ील्ड बनाने का प्रयास करता हूं, लेकिन django document के अनुसार, केवल list_display का एक उदाहरण अनुकूलित करने में सक्षम होने के लिए दिखाया गया है।django व्यवस्थापक: फ़ील्ड में एक फ़ील्ड को कैसे अनुकूलित करें?

models.py में:

def ports_with_same_scanner(self): 
    return PortList.objects.filter(scanner=self.scanner) 
ports_with_same_scanner.short_description = 'port_lists' 

admin.py में, यह काम नहीं करेगा: मैं की तरह निम्नलिखित fieldsets पर समान दृष्टिकोण की कोशिश की

fieldsets = (
      ('Scan Template', { 
      'fields': (('name', 'scanner', 'ports_with_same_scanner',), 'comment', ('in_use', 
       'fc_growing', 'nc_growing'), 'nvt_prefs') 
      }), 
) 

हालांकि, अगर मैं ऐसा यह:

list_display = ('name', 'scanner', 'ports_with_same_scanner', 'comment', 'in_use', 'fc_growing', 'nc_growing', 'nvt_prefs') 

ports_with_same_scanner ठीक काम करता है। समस्या यह है कि मैं अपना प्रदर्शन fieldsets से list_display से बदलना नहीं चाहता, मुझे आश्चर्य है कि मैं वही कार्यक्षमता कैसे प्राप्त कर सकता हूं। धन्यवाद।

उत्तर

5

क्या यह मॉडल स्तर पर फ़िल्टर को लागू करने के लिए काम करेगा? यदि ऐसा है तो आप मॉडल के ForeignKeyField पर limit_choices_to विशेषता का उपयोग कर सकते हैं।

वैकल्पिक रूप से आप मॉडल एडमिन कक्षा के formfield_for_foreignkey विशेषता को ओवरराइड कर सकते हैं।

कुछ की तरह -

class YourModelAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "ports_with_same_scanner": 
      kwargs["queryset"] = PortList.objects.filter(scanner=self.scanner) 
     return super(YourModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

(क्षमा याचना अगर मैं सवाल गलत समझा गया है)

+1

परीक्षण नहीं है 'के बाद से काम किया जाना चाहिए पोर्ट्स_with_same_scanner' मॉडल पर वास्तविक क्षेत्र नहीं है, उपर्युक्त कोड कैसा नहीं है? यदि मैं अपने 'फ़ील्ड्स' परिभाषा में एक गैर-मॉडल-फ़ील्ड को परिभाषित करने का प्रयास करता हूं, तो Django MyModel के लिए निर्दिष्ट 'फील्ड एरर: अज्ञात फ़ील्ड (my_field_1, my_field_2) के साथ बाहर निकल जाएगा। फ़ील्ड/फ़ील्ड/क्लास MyModelAdmin.' के गुणों को बहिष्कृत करें, और यह 'formfield_for_foreignkey()' विधि को कॉल करने से पहले बाहर निकल जाएगा। आप 'पोर्ट्स_with_same_scanner' को इस तरीके से कैसे परिभाषित करते हैं जो Django को खुश रखता है? – Troy

1

मैं अगर अतीत में वास्तविक समस्या है ... मैं हमेशा सरल दृष्टिकोण का उपयोग कर पता नहीं है - एक जोड़ने के लिए readonly_fields =()

उदाहरण के लिए विधि का नाम:

models.py

class My(models.Model): 

    def custom_name(self): 
     return 'test' 
    custom_name.allow_tags = False 
    custom_name.short_description = _('custom_name') 

admin.py

class MyAdmin(admin.ModelAdmin): 
    fieldsets = (
      (None, { 
        'fields': ('sutom_name',) 
      }), 
    ) 
    readonly_fields = ('custom_name',) 

यह Django> = 1.7 ऐसा लगता है दृष्टिकोण Django के प्रारंभिक संस्करण पर लागू किया जा सकता है^लेकिन मैं

+0

भी Django V.1.3.7 के साथ काम करता है – Derrick

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