Respostas:
Em vez de fazer Book.__class__.__name__
na própria classe, se você fizer isso sobre um objeto de livro, book_object.__class__.__name__
você receberá 'Livro' (ou seja, o nome do modelo)
Conforme sugerido pela resposta acima , você pode usar str(Book._meta)
.
Esta pergunta é bastante antiga, mas achei a seguinte útil (testado no Django 1.11, mas pode funcionar em mais antigos ...), já que você também pode ter o mesmo nome de modelo em vários aplicativos.
Supondo que o livro esteja em my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
também.
Consegui o nome da classe usando,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
é o que eu estava procurando; quanto ao outro, dê-me a classe dos pais.
Book._meta.object_name
ou Book._meta.model_name
. Então, se você quiser o nome do aplicativo também, pode ser acessado viaBook._meta.app_label
Você também pode recuperar o nome do modelo da classe Meta do modelo. Isso funciona na própria classe de modelo, bem como em qualquer instância dela:
# 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
Configuração verbose_name
e verbose_name_plural
é opcional. Django inferirá esses valores a partir do nome da classe do modelo (você deve ter notado o uso desses valores no site de administração).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name