2011-02-03 12 views
8

Vorrei che i miei modelli avessero due rappresentazioni di stringa: uno che viene visualizzato nei registri di back-end per scopi di debug e uno più pulito che viene visualizzato per gli utenti quando il modello è rappresentato nell'HTML . In questo momento, sto semplicemente ignorando __unicode__(). C'è un modo per fare questo?Django: rappresentazione in serie dei modelli

risposta

16

È inoltre possibile provare __repr__ e __str__ per i propri scopi di registrazione/debug. È possibile (almeno dovrebbe essere in questo modo) che il tuo logger/debugger usi repr(object) per registrare i tuoi oggetti.

+1

Anzi, '__repr__' viene utilizzato per il debug di rappresentanza/interna, e sia' '__unicode__' o __str__' per uso generale. Questo dovrebbe avere più upvotes. –

7

utilizzare le proprietà

class SomeThing(models.Model): 
    foo= 
    bar= 
    baz= 
    def __unicode__(self): 
     return "{0} {1}".format(self.foo, self.bar) 
    @property 
    def details(self): 
     return repr(dict(foo=self.foo, bar=self.bar, baz=self.baz)) 

Ora è possibile accedere someObject.details

+0

Che dire dell'attributo '__repr__'? Può essere usato in qualche modo? Quindi '__unicode__' è buono per mostrare la stringa in es. admin, e 'details' è buono per scaricare l'oggetto nei log? – Tjorriemorrie