Frage Erhalte den Klassennamen des Django-Modells


Ich habe ein Django-Modell:

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

und ich möchte den Modellnamen als String haben: 'Buch'. Wenn ich versuche, es so zu bekommen:

Book.__class__.__name__

Es gibt 'ModelBase' zurück.

Irgendeine Idee?


76
2017-08-30 10:25


Ursprung


Antworten:


Versuchen Book.__name__.

Django - Modelle sind abgeleitet von der ModelBase, das ist die Metaklasse für alle Modelle.


105
2017-08-30 10:29



Anstatt zu tun Book.__class__.__name__ auf Klasse selbst, wenn Sie es über ein Buchobjekt tun, dann book_object.__class__.__name__ gibt dir "Book" (d. h. der Name des Modells)


39
2017-10-21 06:41



Ich habe den Klassennamen mit

str(Book._meta)

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

4
2017-07-26 07:59



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

Auf diese Weise, wann immer Sie book.class_name aufgerufen haben (auch in der Vorlage {{book.class_name}}) Es wird den Klassennamen zurückgeben, der 'Buch' ist.


1
2018-01-30 11:25



Wie von der antworte obenkannst du benutzen str(Book._meta).

Diese Frage ist ziemlich alt, aber ich fand das folgende hilfreich (getestet auf Django 1.11, könnte aber auf älteren arbeiten ...), da Sie möglicherweise auch den gleichen Modellnamen aus mehreren Apps haben.

Angenommen, Buch ist in 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