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_namelub 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_namei verbose_name_pluraljest 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