Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get class name of django model

People also ask

How to check class name of an object in python?

To get the class name of an instance in Python: Use the type() function and __name__ to get the type or class of the Object/Instance. Using the combination of the __class__ and __name__ to get the type or class of the Object/Instance.

How do I find model in Django?

In Django 1.7+ it is better to use get_model() on the Django app registry, which is available via django. apps. apps. get_model(model_name) .

What is settings Auth_user_model?

Using settings. AUTH_USER_MODEL will delay the retrieval of the actual model class until all apps are loaded. get_user_model will attempt to retrieve the model class at the moment your app is imported the first time. get_user_model cannot guarantee that the User model is already loaded into the app cache.


Try Book.__name__.

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


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)


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

I got class name by using,

str(Book._meta)

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

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'.


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