Ответ 1
Попробуйте Book.__name__
.
Модели Django получены из ModelBase
, который является метаклассом для всех моделей.
У меня есть модель django:
class Book(models.Model):
[..]
и я хочу, чтобы название модели было строкой: "Книга". Когда я пытаюсь сделать так:
Book.__class__.__name__
он возвращает "ModelBase".
Любая идея?
Попробуйте Book.__name__
.
Модели Django получены из ModelBase
, который является метаклассом для всех моделей.
Вместо того, чтобы делать Book.__class__.__name__
в самом классе, если вы делаете это над книжным объектом, тогда book_object.__class__.__name__
предоставит вам "Книгу" (то есть имя модели)
Я получил имя класса, используя
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
class Book(models.Model):
[..]
def class_name(self):
return self.__class__.__name__
Таким образом, всякий раз, когда вы вызываете book.class_name (также в шаблоне {{book.class_name}}
), оно возвращает имя класса, которое является "Книгой".