获取 django 模型的类名

我有一个姜戈模型:

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

我想把模型名称设置为 string: ‘ Book’:

Book.__class__.__name__

返回‘ ModelBase’。

知道吗?

99273 次浏览

试试 Book.__name__

Django 模型是从 ModelBase派生出来的,ModelBase是所有模型的元类。

如果在 Book 对象上执行,而不是在类本身上执行 Book.__class__.__name__,那么 book_object.__class__.__name__将为您提供“ Book”(即模型的名称)

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

通过这种方式,无论何时您在 python 代码中调用 book.class_name()(也是在模板 \{\{book.class_name}}中) ,它都将返回类名“ Book”。

我通过使用,

str(Book._meta)


Book.__class__.__name__  -> this will give you the ModelBase

根据 上面的回答的建议,您可以使用 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

您还可以从模型的 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