2013-02-08 10 views
11

Desidero visualizzare una mappa incorporata in un modulo di amministrazione quando i dati sono già presenti nel db. Ho il seguente codice:Come si chiama un metodo model nei set di modelli django ModelAdmin?

models.py

class Address(models.Model): 
    address = models.CharField() 

    def address_2_html(self): 
     if self.address: 
      # Return html for an embedded map using the entered address. 
      return embedded_map_html 
     else: 
      return '' 
    address_2_html.allow_tags = True 

admin.py

class AddressAdmin(admin.ModelAdmin): 
    fieldsets = [(label, {'fields': ['address','address_2_html']}),] 

Questo non funziona. Ottengo un errore:

'AddressAdmin.fieldsets[1][1]['fields']' refers to field 'address_2_html' that is missing from the form. 

Un'altra cosa che ho provato è stato utilizzando l'opzione 'descrizione' per 'fieldsets', pero 'address_2_html' non è accessibile nell'ambito di applicazione della AddressAdmin. Sono riuscito a incorporare una mappa statica usando la 'descrizione' che era bella ma non abbastanza interessante.

risposta

22

Come quella (a memoria):

class AddressAdmin(admin.ModelAdmin): 
    fieldsets = [(label, {'fields': ['address','address_2_html']}),] 
    readonly_fields = ['address_2_html'] 

    def address_2_html(self, obj): 
     return obj.address_2_html() 
    address_2_html.allow_tags = True 
    address_2_html.short_description = 'Address display' 
+0

ottengo il seguente errore con questa soluzione: 'AddressAdmin.fieldsets [0] [1] [' campi ']' si riferisce al campo 'address_2_html' che manca dal modulo. –

+1

Se 'display_map3' è equivalente al tuo 'address_2_html' nel tuo esempio, hai messo 'display_map3' in 'readonly_fields' come nel mio esempio? – Etienne

+0

Questa soluzione funziona per "list_display" ma non per "campi". –

1

Problema risolto sovrascrivendo get_fieldsets() in quanto i get_fieldsets() metodo consente l'accesso al modello a oggetti di Indirizzo.

def get_fieldsets(self, request, obj=None): 
    fs = [ 
     (self.label, {'fields': ['address',]}), 
     ('Map', {'fields': [], # required by django admin 
       'description':obj.address_2_html(), 
     }), 
    ] 
    return fs 
Problemi correlati