Ответы:
Вместо того, чтобы делать это Book.__class__.__name__
в самом классе, если вы делаете это над объектом-книгой, тогда book_object.__class__.__name__
вы получите 'Book' (то есть имя модели).
Как указано в ответе выше , вы можете использовать str(Book._meta)
.
Этот вопрос довольно старый, но я нашел следующее полезным (протестировано на Django 1.11, но может работать и на более старых ...), поскольку у вас также может быть одно и то же имя модели из нескольких приложений.
Предполагая, что книга находится в my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
.
Я получил имя класса, используя,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
это то, что я искал; что касается другого, дайте мне родительский класс.
Book._meta.object_name
или Book._meta.model_name
. Затем, если вам нужно также название приложения, оно доступно черезBook._meta.app_label
Вы также можете получить название модели из класса Meta модели. Это работает как с классом модели, так и с любым его экземпляром:
# Model definition
class Book(models.Model):
# fields...
class Meta:
verbose_name = 'book'
verbose_name_plural = 'books'
# Get some model
book = Book.objects.first()
# Get the model name
book._meta.verbose_name
Настройка verbose_name
и verbose_name_plural
не обязательна. Django выведет эти значения из имени класса модели (вы могли заметить использование этих значений на сайте администратора).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name