Antworten:
Statt tun Book.__class__.__name__
sich auf Klasse, wenn Sie es über ein Buch Objekt tun, dann book_object.__class__.__name__
geben Sie ‚Buch‘ (dh der Name des Modells)
Wie in der obigen Antwort vorgeschlagen , können Sie verwenden str(Book._meta)
.
Diese Frage ist ziemlich alt, aber ich fand Folgendes hilfreich (getestet auf Django 1.11, funktioniert aber möglicherweise auf älteren ...), da Sie möglicherweise auch denselben Modellnamen aus mehreren Apps haben.
Vorausgesetzt, das Buch ist 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
.
Ich habe den Klassennamen mit,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
ist das, wonach ich gesucht habe; Was den anderen betrifft, gib mir die Elternklasse.
Book._meta.object_name
oder erhalten Book._meta.model_name
. Wenn Sie dann auch den Namen der App möchten, können Sie überBook._meta.app_label
Sie können den Modellnamen auch aus der Meta-Klasse des Modells abrufen. Dies funktioniert sowohl für die Modellklasse selbst als auch für jede Instanz davon:
# 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
Einstellung verbose_name
und verbose_name_plural
ist optional. Django leitet diese Werte aus dem Namen der Modellklasse ab (möglicherweise haben Sie die Verwendung dieser Werte auf der Admin-Site bemerkt).
https://docs.djangoproject.com/de/3.0/ref/models/options/#verbose-name