开发者

Get class name of django model

I have a django model:

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

and I want to have the model name as string: 'Book'. When I try to get it this way:

Book.__class__.__name__

it ret开发者_Go百科urns 'ModelBase'.

Any idea?


Try Book.__name__.

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


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


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)


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜