首页 文章

获取django模型的类名

提问于
浏览 1617
83

我有一个django模型:

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

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

Book.__class__.__name__

它返回'ModelBase' .

任何的想法?

5 回答

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

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

  • 41

    试试 Book.__name__ .

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

  • 6

    我用了得到了 class 名字,

    str(Book._meta)
    
    Book.__class__.__name__  -> this will give you the ModelBase
    
  • 4

    根据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
    
  • 2

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

相关问题