J'ai un modèle Django:
class Book(models.Model):
[..]
et je veux avoir le nom du modèle sous forme de chaîne: 'Book'. Quand j'essaye de l'obtenir de cette façon:
Book.__class__.__name__
il renvoie 'ModelBase'.
Une idée?
Essayez Book.__name__
.
Les modèles Django sont dérivés du ModelBase
, qui est la métaclasse pour tous les modèles.
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 "Livre" (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 est dans my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
J'ai obtenu le nom de classe en utilisant,
str(Book._meta)
Book.__class__.__ -> this will give you the ModelBase
class Book(models.Model):
[..]
def class_name(self):
return self.__class__.__name__
De cette façon, chaque fois que vous appelez book.class_name()
dans python (également dans le modèle {{book.class_name}}
), Il renverra le nom de la classe qui est 'Book'.