我有一个django模型:
class Book(models.Model):
[..]
我希望将模型名称设为字符串:'Book'。当我试图这样做时:
Book.__class__.__name__
它返回'ModelBase'。
有什么想法吗?
答案 0 :(得分:124)
尝试Book.__name__
。
Django模型派生自ModelBase
,它是所有模型的元类。
答案 1 :(得分:43)
而不是对类本身进行Book.__class__.__name__
,如果你在一个书籍对象上做,book_object.__class__.__name__
将给你'书'(即模型的名称)
答案 2 :(得分:19)
根据answer above的建议,您可以使用<mat-tab-group [selectedIndex]="tab" (selectedTabChange)="onTab($event)"/>
。
这个问题相当陈旧,但我发现以下内容很有帮助(在Django 1.11上测试过,但可能适用于较旧的...),因为您可能也有多个应用程序使用相同的型号名称。
假设Book位于str(Book._meta)
:
my_app
答案 3 :(得分:8)
我使用
获得了班级名称str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
答案 4 :(得分:4)
您还可以从模型的Meta类中检索模型名称。这适用于模型类本身及其任何实例:
# 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
设置verbose_name
和verbose_name_plural
是可选的。 Django将从模型类的名称中推断出这些值(您可能已经在管理站点中注意到了这些值的使用)。
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name
答案 5 :(得分:2)
class Book(models.Model):
[..]
def class_name(self):
return self.__class__.__name__
通过这种方式,每当你在python代码中调用book.class_name()
时(也在模板{{book.class_name}}
中),它将返回类名,即#Book;#&#39;