获取django模型的类名

我有一个django模型:

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

我希望将模型名称设为字符串:'Book' . 当我试图这样做时:

Book.__class__.__name__

它返回'ModelBase' .

任何的想法?

回答(5)

3 years ago

试试 Book.__name__ .

Django模型源自 ModelBase ,它是所有模型的元类 .

3 years ago

而不是在类本身上做 Book.__class__.__name__ ,如果你在书籍对象上做,那么 book_object.__class__.__name__ 会给你'Book'(即模型的名称)

3 years ago

我用了得到了 class 名字,

str(Book._meta)

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

3 years ago

根据answer above的建议,您可以使用 str(Book._meta) .

这个问题已经很老了,但我发现以下内容很有用(在Django 1.11上测试过,但可能适用于较旧的...),因为您可能也有多个应用程序的相同型号名称 .

假设Book在 my_app

print(Book._meta.object_name)
# Book

print(Book._meta.model_name)
# book

print(Book._meta.app_label)
# my_app

3 years ago

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

通过这种方式,每当您调用book.class_name(也在模板 {{book.class_name}} 中)时,它将返回类名'Book' .