Получить имя класса модели django

У меня есть модель django:

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

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

Book.__class__.__name__

он возвращает "ModelBase".

Любая идея?

Ответ 1

Попробуйте Book.__name__.

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

Ответ 2

Вместо того, чтобы делать Book.__class__.__name__ в самом классе, если вы делаете это над книжным объектом, тогда book_object.__class__.__name__ предоставит вам "Книгу" (то есть имя модели)

Ответ 3

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

str(Book._meta)

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

Ответ 4

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

Таким образом, всякий раз, когда вы вызываете book.class_name (также в шаблоне {{book.class_name}}), оно возвращает имя класса, которое является "Книгой".