获取django模型的类名

时间:2010-08-30 10:25:10

标签: django django-models

我有一个django模型:

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

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

Book.__class__.__name__

它返回'ModelBase'。

有什么想法吗?

6 个答案:

答案 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_nameverbose_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;