и я хочу, чтобы название модели было строкой: "Книга". Когда я пытаюсь сделать так:
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}}), оно возвращает имя класса, которое является "Книгой".