Pregunta Obtener el nombre de clase del modelo django


Tengo un modelo django:

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

y quiero tener el nombre del modelo como cadena: 'Libro'. Cuando trato de hacerlo de esta manera:

Book.__class__.__name__

devuelve 'ModelBase'.

¿Alguna idea?


76
2017-08-30 10:25


origen


Respuestas:


Tratar Book.__name__.

Los modelos de Django se derivan del ModelBase, que es la Metaclass para todos los modelos.


105
2017-08-30 10:29



En lugar de hacer Book.__class__.__name__ en la clase en sí, si lo haces sobre un objeto libro, entonces book_object.__class__.__name__ le dará 'Libro' (es decir, el nombre del modelo)


39
2017-10-21 06:41



Obtuve el nombre de clase usando,

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__

De esta forma, cada vez que llamas a book.class_name (también en la plantilla {{book.class_name}}) devolverá el nombre de la clase que es 'Libro'.


1
2018-01-30 11:25



Según lo sugerido por el respuesta arriba, puedes usar str(Book._meta).

Esta pregunta es bastante antigua, pero me pareció útil lo siguiente (probado en Django 1.11, pero podría funcionar en versiones anteriores ...), ya que también puede tener el mismo nombre de modelo de varias aplicaciones.

Asumiendo Libro está en 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