Réponses:
Au lieu de faire Book.__class__.__name__
sur la classe elle-même, si vous le faites sur un objet livre, alors book_object.__class__.__name__
vous donnera 'Book' (c'est-à-dire le nom du modèle)
Comme suggéré par le réponse ci - dessus , vous pouvez utiliser str(Book._meta)
.
Cette question est assez ancienne, mais j'ai trouvé ce qui suit utile (testé sur Django 1.11, mais pourrait fonctionner sur des versions plus anciennes ...), car vous pouvez également avoir le même nom de modèle à partir de plusieurs applications.
En supposant que le livre se trouve dans my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
.
J'ai obtenu le nom de la classe en utilisant,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
est ce que je cherchais; quant à l'autre, donnez-moi la classe des parents.
Book._meta.object_name
ou Book._meta.model_name
. Ensuite, si vous voulez également le nom de l'application, il est accessible viaBook._meta.app_label
Vous pouvez également récupérer le nom du modèle à partir de la classe Meta du modèle. Cela fonctionne sur la classe de modèle elle-même ainsi que sur toute instance de celle-ci:
# 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
Le réglage verbose_name
et verbose_name_plural
est facultatif. Django déduira ces valeurs à partir du nom de la classe de modèle (vous avez peut-être remarqué l'utilisation de ces valeurs sur le site d'administration).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name