[Django]-Get class name of django model

204👍

Try Book.__name__.

Django models are derived from the ModelBase, which is the Metaclass for all models.

👤miku

81👍

As suggested by the answer above, you can use str(Book._meta).

This question is quite old, but I found the following helpful (tested on Django 1.11, but might work on older…), as you may also have the same model name from multiple apps.

Assuming Book is in my_app:

print(Book._meta.object_name)
# Book

print(Book._meta.model_name)
# book

print(Book._meta.app_label)
# my_app

72👍

Instead of doing Book.__class__.__name__ on class itself, if you do it over a book object, then book_object.__class__.__name__ will give you ‘Book’ (i.e the name of the model)

8👍

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

With this way, whenever you called book.class_name() in python code (also in the template {{book.class_name}}) it will return class name which is ‘Book’.

👤Brkyrn

8👍

I got class name by using,

str(Book._meta)

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

6👍

You could also retrieve the model name from the model’s Meta class. This works on the model class itself as well as any instance of it:

# Model definition
class Book(models.Model):
    # fields...

    class Meta:
        verbose_name = 'book'
        verbose_name_plural = 'books'


# Get some model
book = Book.objects.first()

# Get the model name
book._meta.verbose_name

Setting verbose_name and verbose_name_plural is optional. Django will infer these values from the name of the model class (you may have noticed the use of those values in the admin site).

https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name

👤Leo

Leave a comment