Pytanie Uzyskaj nazwę klasy modelu django


Mam model django:

class Book(models.Model):
  [..]

i chcę mieć nazwę modelu jako ciąg: "Book". Kiedy próbuję to zrobić w ten sposób:

Book.__class__.__name__

zwraca "ModelBase".

Dowolny pomysł?


76
2017-08-30 10:25


pochodzenie




Odpowiedzi:


Próbować Book.__name__.

Modele Django pochodzą z ModelBase, która jest Metaclass dla wszystkich modeli.


105
2017-08-30 10:29





Zamiast robić Book.__class__.__name__ na samej klasie, jeśli zrobisz to nad obiektem książki, to book_object.__class__.__name__ da ci "książkę" (czyli nazwę modelu)


39
2017-10-21 06:41



Ten pomógł mi w moim przypadku. Połączyłem 2 kwerendy różnych modeli. W pętli potrzebowałem uzyskać nazwę klasy obiektu podczas iteracji. - Peter
Peter, jak scaliłeś dwa zestawy pytań? Czy jest połączony zestaw tylko listę instancji modelu? Dzięki - little_birdie


Mam nazwę klasy, używając,

str(Book._meta)

Book.__class__.__name__  -> this will give you the ModelBase

4
2017-07-26 07:59



Dzięki; str(self.model._meta) tego właśnie szukałem; jak dla drugiego daj mi klasę rodzicielską. - ppython
Jeśli chcesz czegoś bardziej niejawnego niż wywołanie łańcucha, możesz uzyskać to samo (wypróbowane na Django 1.11) za pomocą: Book._meta.object_name lub Book._meta.model_name. Następnie, jeśli chcesz również nazwę aplikacji, to jest dostępne przez Book._meta.app_label - Geekfish


class Book(models.Model):
  [..]   
  def class_name(self):
    return self.__class__.__name__

W ten sposób, gdy nazwiesz book.class_name (również w szablonie {{book.class_name}}) zwróci nazwę klasy, która jest "Book".


1
2018-01-30 11:25





Jak sugeruje odpowiedź powyżej, możesz użyć str(Book._meta).

To pytanie jest dość stare, ale znalazłem następujące pomocne (testowane na Django 1.11, ale może działać na starszych ...), ponieważ możesz mieć również 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

print(Book._meta.app_label)
# my_app.Book

1
2018-05-03 11:58