我有一个django模型:
class Book(models.Model): [..]
我希望将模型名称设为字符串:'Book' . 当我试图这样做时:
Book.__class__.__name__
它返回'ModelBase' .
任何的想法?
试试 Book.__name__ .
Book.__name__
Django模型源自 ModelBase ,它是所有模型的元类 .
ModelBase
而不是在类本身上做 Book.__class__.__name__ ,如果你在书籍对象上做,那么 book_object.__class__.__name__ 会给你'Book'(即模型的名称)
book_object.__class__.__name__
我用了得到了 class 名字,
str(Book._meta) Book.__class__.__name__ -> this will give you the ModelBase
根据answer above的建议,您可以使用 str(Book._meta) .
str(Book._meta)
这个问题已经很老了,但我发现以下内容很有用(在Django 1.11上测试过,但可能适用于较旧的...),因为您可能也有多个应用程序的相同型号名称 .
假设Book在 my_app :
my_app
print(Book._meta.object_name) # Book print(Book._meta.model_name) # book print(Book._meta.app_label) # my_app
class Book(models.Model): [..] def class_name(self): return self.__class__.__name__
通过这种方式,每当您调用book.class_name(也在模板 {{book.class_name}} 中)时,它将返回类名'Book' .
{{book.class_name}}
5 回答
试试
Book.__name__
.Django模型源自
ModelBase
,它是所有模型的元类 .而不是在类本身上做
Book.__class__.__name__
,如果你在书籍对象上做,那么book_object.__class__.__name__
会给你'Book'(即模型的名称)我用了得到了 class 名字,
根据answer above的建议,您可以使用
str(Book._meta)
.这个问题已经很老了,但我发现以下内容很有用(在Django 1.11上测试过,但可能适用于较旧的...),因为您可能也有多个应用程序的相同型号名称 .
假设Book在
my_app
:通过这种方式,每当您调用book.class_name(也在模板
{{book.class_name}}
中)时,它将返回类名'Book' .