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?
django
django-models
schneck
la source
la source
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
:la source
2.2.3
.J'ai obtenu le nom de la classe en utilisant,
la source
str(self.model._meta)
est ce que je cherchais; quant à l'autre, donnez-moi la classe des parents.Book._meta.object_name
ouBook._meta.model_name
. Ensuite, si vous voulez également le nom de l'application, il est accessible viaBook._meta.app_label
De cette façon, chaque fois que vous
book.class_name()
appelez du code python (également dans le modèle{{book.class_name}}
), il renverra le nom de la classe qui est «Book».la source
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:
Le réglage
verbose_name
etverbose_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
la source