2010-08-30 16 views
71

Mam modelu django:Uzyskaj nazwę klasy django modelu

class Book(models.Model): 
    [..] 

i chcę mieć nazwę modelu jako ciąg znaków: „książka”. Kiedy próbuję uzyskać to w ten sposób:

Book.__class__.__name__ 

zwraca "ModelBase".

Każdy pomysł?

Odpowiedz

98

Wypróbuj Book.__name__.

Modele Django pochodzą z ModelBase, który jest Metaclass dla wszystkich modeli.

34

Zamiast robić Book.__class__.__name__ na samej klasy, jeśli robisz to na obiekcie książki, a następnie book_object.__class__.__name__ daje „Book” (czyli nazwa modelu)

+0

Ten pomógł mi w moim przypadku. Połączyłem 2 kwerendy różnych modeli. W pętli potrzebowałem uzyskać nazwę klasy obiektu podczas iteracji. – Peter

+0

Peter, jak scaliłeś dwa zestawy pytań? Czy jest połączony zestaw tylko listę instancji modelu? Dzięki –

1
class Book(models.Model): 
    [..] 
    def class_name(self): 
    return self.__class__.__name__ 

W ten sposób, kiedy tylko o nazwie book.class_name (również w szablonie {{book.class_name}}) zwróci nazwę klasy, która jest "Book".

2

mam nazwę klasy za pomocą,

str(Book._meta) 

Book.__class__.__name__ -> this will give you the ModelBase 
+0

Dzięki; 'str (self.model._meta)' jest tym, czego szukałem; jak dla drugiego daj mi klasę rodzicielską. – ppython