2011-02-03 14 views
8

Chciałbym, aby moje modele miały dwie reprezentacje ciągów: jedną, która jest wyświetlana w dziennikach zaplecza do celów debugowania, i czystszą, która jest wyświetlana użytkownikom końcowym, gdy model jest reprezentowany w kodzie HTML . Właśnie nadpisuję __unicode__(). Czy jest jakiś sposób na zrobienie tego?Django: reprezentacja ciągów modeli

Odpowiedz

16

Możesz również wypróbować __repr__ i __str__ dla celów rejestrowania/debugowania. Możliwe (przynajmniej powinno być tak), że twój logger/debugger używa repr(object) do rejestrowania twoich obiektów.

+1

Rzeczywiście, '__repr__' służy do debugowania/reprezentacji wewnętrznej i albo' '__str__' __unicode__' lub do ogólnego użytku. To powinno mieć więcej upvotes. –

7

użyć właściwości

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

Teraz możesz zalogować someObject.details

+0

Co z tym atrybutem "__repr__"? Czy to może być jakoś wykorzystane? Tak więc "__unicode__" dobrze wyświetla łańcuch w np. admin, a "szczegóły" dobrze jest zrzucić obiekt do logów? – Tjorriemorrie