2012-08-13 8 views
6

Desidero sovrascrivere il valore visualizzato per un campo nell'amministratore di Django. Il campo contiene XML e quando lo si visualizza nell'amministratore, desidero formattarlo in modo grazioso per una facile leggibilità. So come fare la riformattazione in lettura e scrittura del campo stesso, ma questo non è quello che voglio fare. Voglio che l'XML memorizzato con spazio vuoto sia stato rimosso e voglio solo riformattarlo quando viene visualizzato nel modulo di modifica dell'amministratore.Come sovrascrivere la visualizzazione del valore del campo nel modulo di modifica dell'amministratore di Django

Quindi la mia domanda è, come posso controllare il valore visualizzato nella textarea del modulo di modifica amministratore per questo campo?

+0

Sei parlando solo di spaziatura e indentazione, o in realtà cambiando stili come colore, dimensioni, ecc.? Quest'ultimo non è possibile. –

+0

È il primo a cui sono interessato. Voglio solo sostituire il valore visualizzato nella textarea con un valore diverso. – gbutler

risposta

13
class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     self.initial['some_field'] = some_encoding_method(self.instance.some_field) 

class MyModelAdmin(admin.ModelAdmin): 
    form = MyModelForm 
    ... 

Dove, some_encoding_method sarebbe qualcosa che hai impostato per determinare la spaziatura/indentazione o qualche altra funzionalità di terze parti che stai prendendo in prestito su. Tuttavia, se si scrive il proprio metodo, sarebbe meglio metterlo sul modello, in sé, e quindi chiamare attraverso l'istanza:

class MyModel(models.Model): 
    ... 
    def encode_some_field(self): 
     # do something with self.some_field 
     return encoded_some_field 

Poi:

self.instance.encode_some_field() 
+1

Questo ha fatto il trucco. Grazie! – gbutler