我想知道是否有一种方法可以知道一个模型包含多少个字段。
示例:
class Post(models.Model):
title = models.TextField()
body = models.TextField()
sub_title = models.TextField()
summary = models.TextField()
我可以数一下,但是我想知道是否有一种内置方法可以使我这样做。
理想情况下,查询/代码应为:
Post.number_of_fieds
->输出-> 4
这样的东西存在吗?
答案 0 :(得分:4)
据我所知,没有内置函数,您可以使用以下方法获取字段:
>>> len(Post._meta.fields)
5
我们可以在BaseModel
类上定义它,并将其子类化,以使此类功能可用于所有子类:
class BaseModel(models.Model):
class Meta:
abstract = True
@classmethod
def number_of_fields(cls):
return len(cls._meta.fields)
class Post(BaseModel):
title = models.TextField()
body = models.TextField()
sub_title = models.TextField()
summary = models.TextField()
.fields
返回在该模型上定义的字段的ImmutableList
。我们也可以使用.get_fields()
来考虑针对该模型的关系。
然后我们可以像这样查询:
>>> Post.number_of_fields()
5
但是请注意,由于模型在此处具有(隐式)主键,因此它将返回5
。
答案 1 :(得分:2)
您可以尝试
>>> Post._meta.fields.__len__()
5