2011-02-03 16 views
8

Me gustaría que mis modelos tengan dos representaciones de cadena: una que se muestra en los registros del backend para depuración y otra más limpia que se muestra a los usuarios finales cuando el modelo está representado en el HTML . En este momento, estoy anulando __unicode__(). ¿Hay alguna forma de hacer esto?Django: Representación de cadena de los modelos

Respuesta

16

También puedes probar __repr__ y __str__ para tus propósitos de registro/depuración. Es posible (al menos así debería ser) que su registrador/depurador use repr(object) para registrar sus objetos.

+1

De hecho, '__repr__' se utiliza para la representación de depuración/interno, y, o bien' '__unicode__' o __str__' para uso general. Esto debería tener más votos positivos. –

7

Usar las propiedades

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)) 

Ahora puede iniciar sesión someObject.details

+0

¿Qué pasa con ese atributo '__repr__'? ¿Puede ser utilizado de alguna manera? Así que '__unicode__' es bueno para mostrar la cadena en, por ejemplo, admin, y los 'details' son buenos para volcar el objeto a los registros? – Tjorriemorrie

Cuestiones relacionadas