sch*_*eck 98 django django-models
我有一个django模型:
class Book(models.Model):
[..]
Run Code Online (Sandbox Code Playgroud)
我希望将模型名称设为字符串:'Book'.当我试图这样做时:
Book.__class__.__name__
Run Code Online (Sandbox Code Playgroud)
它返回'ModelBase'.
任何的想法?
vij*_*ker 45
而不是Book.__class__.__name__在类本身上做,如果你在一个书对象上做,那么book_object.__class__.__name__会给你'书'(即模型的名称)
Gee*_*ish 25
如上面的答案所示,你可以使用str(Book._meta).
这个问题已经很老了,但是我发现以下内容很有用(在Django 1.11上测试过,但可能适用于较旧的...),因为您可能也有多个应用程序的相同型号名称.
假设书在my_app:
print(Book._meta.object_name)
# Book
print(Book._meta.model_name)
# book
print(Book._meta.app_label)
# my_app
Run Code Online (Sandbox Code Playgroud)
我用了得到了班级名字,
str(Book._meta)
Book.__class__.__name__ -> this will give you the ModelBase
Run Code Online (Sandbox Code Playgroud)
您还可以从模型的 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
Run Code Online (Sandbox Code Playgroud)
设置verbose_name和verbose_name_plural是可选的。Django 将从模型类的名称推断这些值(您可能已经注意到在管理站点中使用了这些值)。
https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name
小智 5
class Book(models.Model):
[..]
def class_name(self):
return self.__class__.__name__
Run Code Online (Sandbox Code Playgroud)
通过这种方式,每当您调用book.class_name()python 代码(也在模板中{{book.class_name}})时,它将返回类名,即“Book”。