Відповіді:
Замість того, щоб робити Book.__class__.__name__
на самому класі, якщо ви робите це над книжковим об'єктом, тоді book_object.__class__.__name__
ви отримаєте "Книга" (тобто назва моделі)
Як запропоновано у відповіді вище , ви можете використовувати 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
Ви також можете отримати ім'я моделі з мета-класу моделі. Це працює як на самому класі моделі, так і на будь-якому його екземплярі:
# 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