2010-08-30 10 views
71

Tengo un modelo de Django:Obtener nombre de la clase de modelo de Django

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

y yo quiero tener el nombre del modelo como cadena: 'libro'. Cuando trato de obtenerlo de esta manera:

Book.__class__.__name__ 

devuelve 'Modelo Base'.

¿Alguna idea?

Respuesta

98

Probar Book.__name__.

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

34

En vez de hacer Book.__class__.__name__ de clase en sí, si lo hace sobre un objeto libro, entonces book_object.__class__.__name__ te dará 'libro' (es decir, el nombre del modelo)

+0

Éste me ayudó en mi caso. Combiné 2 conjuntos de consulta que son de diferentes modelos. En un bucle, necesitaba obtener el nombre de clase del objeto cuando estoy iterando. – Peter

+0

Peter, ¿cómo combinaste dos querysets? ¿O el conjunto combinado es solo una lista de instancias modelo? Gracias –

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

Con esta manera, cada vez que se llamado book.class_name (también en la plantilla {{book.class_name}}) devolverá el nombre de la clase que es 'Book'.

2

que tiene nombre de clase utilizando,

str(Book._meta) 

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

Gracias; 'str (self.model._meta)' es lo que estaba buscando; en cuanto a la otra, dame la clase de padres. – ppython

Cuestiones relacionadas