Eu tenho um modelo django:
class Book(models.Model):
[..]
e quero ter o nome do modelo como string: 'Livro'. Quando tento fazer desta forma:
Book.__class__.__name__
ele retorna 'ModelBase'.
Qualquer ideia?
django
django-models
schneck
fonte
fonte
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
:fonte
2.2.3
também.Consegui o nome da classe usando,
fonte
str(self.model._meta)
é o que eu estava procurando; quanto ao outro, dê-me a classe dos pais.Book._meta.object_name
ouBook._meta.model_name
. Então, se você quiser o nome do aplicativo também, pode ser acessado viaBook._meta.app_label
Dessa forma, sempre que você chamar o
book.class_name()
código python (também no modelo{{book.class_name}}
), ele retornará o nome da classe que é 'Livro'.fonte
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:
Configuração
verbose_name
everbose_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
fonte