Mam model django:
class Book(models.Model):
[..]
i chcę, aby nazwa modelu była ciągiem: „Książka”. Kiedy próbuję uzyskać to w ten sposób:
Book.__class__.__name__
zwraca „ModelBase”.
Dowolny pomysł?
django
django-models
schneck
źródło
źródło
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
:źródło
2.2.3
.Otrzymałem nazwę klasy, używając,
źródło
str(self.model._meta)
jest tym, czego szukałem; co do drugiej daj mi klasę rodzicielską.Book._meta.object_name
lubBook._meta.model_name
. Jeśli chcesz również nazwę aplikacji, jest dostępna za pośrednictwemBook._meta.app_label
W ten sposób za każdym razem, gdy
book.class_name()
wywołałeś kod Pythona (również w szablonie{{book.class_name}}
), zwróci on nazwę klasy, która to „Książka”.źródło
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:
Ustawienie
verbose_name
iverbose_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
źródło