Odpowiedzi:
Zamiast Book.__class__.__name__
zajmować się samą klasą, jeśli zrobisz to na obiekcie z książki, book_object.__class__.__name__
otrzymasz `` Book '' (tj. Nazwę modelu)
Jak sugeruje powyższa odpowiedź , możesz użyć str(Book._meta)
.
To pytanie jest dość stare, ale uznałem je za pomocne (testowane na Django 1.11, ale może działać na starszych ...), ponieważ możesz również mieć tę samą nazwę modelu z wielu aplikacji.
Zakładając, że książka jest w my_app
:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
2.2.3
.
Otrzymałem nazwę klasy, używając,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
str(self.model._meta)
jest tym, czego szukałem; co do drugiej daj mi klasę rodzicielską.
Book._meta.object_name
lub Book._meta.model_name
. Jeśli chcesz również nazwę aplikacji, jest dostępna za pośrednictwemBook._meta.app_label
Możesz również pobrać nazwę modelu z klasy Meta modelu. Działa to na samej klasie modelu, jak również na każdym jej egzemplarzu:
# 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
Ustawienie verbose_name
i verbose_name_plural
jest opcjonalne. Django wywnioskuje te wartości z nazwy klasy modelu (być może zauważyłeś użycie tych wartości na stronie administratora).
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name