代码之家  ›  专栏  ›  技术社区  ›  schneck

获取django模型的类名

  •  89
  • schneck  · 技术社区  · 16 年前

    我有一个Django模型:

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

    我想把模型名作为字符串:“book”。当我试着这样做的时候:

    Book.__class__.__name__
    

    它返回“modelbase”。

    有什么想法吗?

    5 回复  |  直到 7 年前
        1
  •  121
  •   miku    16 年前

    尝试 Book.__name__ .

    Django模型源自 ModelBase 这是所有模型的元类。

        2
  •  43
  •   vijay shanker    13 年前

    而不是做 Book.__class__.__name__ 在类本身上,如果对Book对象执行此操作,则 book_object.__class__.__name__ 会给你“书”(即模型的名称)

        3
  •  17
  •   OrangeDog    8 年前

    按照 answer above ,你可以使用 str(Book._meta) .

    这个问题很古老,但我发现以下内容很有用(在Django1.11上测试过,但可能适用于更老的…),因为您可能也有来自多个应用程序的相同型号名称。

    假设书在 my_app :

    print(Book._meta.object_name)
    # Book
    
    print(Book._meta.model_name)
    # book
    
    print(Book._meta.app_label)
    # my_app
    
        4
  •  7
  •   Mohideen bin Mohammed    9 年前

    我通过使用得到类名,

    str(Book._meta)
    
    Book.__class__.__name__  -> this will give you the ModelBase
    
        5
  •  2
  •   Hussam    7 年前
    class Book(models.Model):
      [..]   
      def class_name(self):
        return self.__class__.__name__
    

    用这种方式,无论你什么时候打电话 book.class_name() 在python代码中(也在模板中 {{book.class_name}} )它将返回类名,即“book”。