Risposte:
Invece di fare Book.__class__.__name__
sulla classe stessa, se lo fai su un oggetto libro, allora book_object.__class__.__name__
ti darà 'Libro' (cioè il nome del modello)
Come suggerito dalla risposta sopra , puoi usare str(Book._meta)
.
Questa domanda è piuttosto vecchia, ma ho trovato utile quanto segue (testato su Django 1.11, ma potrebbe funzionare su vecchi ...), poiché potresti anche avere lo stesso nome di modello da più app.
Supponendo che Book sia in my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
.
Ho ottenuto il nome della classe utilizzando,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
è quello che stavo cercando; per quanto riguarda gli altri dammi la classe genitore.
Book._meta.object_name
o Book._meta.model_name
. Quindi, se vuoi anche il nome dell'app, è accessibile tramiteBook._meta.app_label
È inoltre possibile recuperare il nome del modello dalla classe Meta del modello. Funziona sulla classe del modello stessa e su qualsiasi istanza di essa:
# 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
L'impostazione verbose_name
ed verbose_name_plural
è opzionale. Django dedurrà questi valori dal nome della classe del modello (potresti aver notato l'uso di quei valori nel sito di amministrazione).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name