计算模型有多少个字段

时间:2019-07-25 18:27:15

标签: django

我想知道是否有一种方法可以知道一个模型包含多少个字段。

示例:

class Post(models.Model):
    title = models.TextField()
    body = models.TextField()
    sub_title = models.TextField()
    summary = models.TextField()

我可以数一下,但是我想知道是否有一种内置方法可以使我这样做。

理想情况下,查询/代码应为:

Post.number_of_fieds->输出-> 4

这样的东西存在吗?

2 个答案:

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