2010-08-30 2 views
71

У меня есть Джанго модель:Получить имя класса Джанго модели

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

, и я хочу, чтобы иметь название модели как строку: «Книга». Когда я пытаюсь получить его таким образом:

Book.__class__.__name__ 

он возвращает «ModelBase».

Любая идея?

ответ

98

Пробег: Book.__name__.

Модели Django производны от ModelBase, который является Metaclass для всех моделей.

34

Вместо того чтобы делать Book.__class__.__name__ на самом классе, если вы делаете это по книге объекта, то book_object.__class__.__name__ даст вам «Книга» (то есть название модели)

+0

Это один помог мне в моем случае. Я объединил 2 запроса, которые имеют разные модели. В цикле мне нужно было получить имя класса объекта, когда я повторяю. – Peter

+0

Питер, как вы объединили два запроса? Или это объединенный набор только список экземпляров модели? Thanks –

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

С таким образом, всякий раз, когда вам имя book.class_name (также в шаблоне {{book.class_name}}), оно будет возвращать имя класса, которое является «Книгой».

2

Я получил имя класса, используя,

str(Book._meta) 

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

Thanks; 'str (self.model._meta)' это то, что я искал; а для другого дайте мне родительский класс. – ppython

Смежные вопросы