如何返回一个对象中的空字段数?

时间:2018-07-21 21:49:35

标签: django

我正在尝试创建一个进度条功能,在该功能中,您可以通过在个人资料中插入哪些数据来告诉您进度。这个想法是将所有空字段都减去,然后从字段总数中减去。

如何获取所有空字段并将其作为数字返回?

1 个答案:

答案 0 :(得分:0)

您可以使用bool()检查“空”字段。

fields = instance._meta.fields
empty = sum(bool(getattr(instance, field.attname)) for field in fields)

您可能希望将其限制为仅检查某些字段类型,例如CharFields和TextFields。

fields = [f for f in instance._meta.fields if isinstance(f, (TextField, CharField))]

您可以将此添加为模型类上的方法或属性。在这种情况下,progress将返回0到1之间的数字。

class MyModel(models.Model):
    ...
    @property
    def progress(self):
        text_fields = [f for f in self._meta.fields if isinstance(f, (TextField, CharField))]
        values = (getattr(self, field.attname) for field in text_fields)
        return sum(bool(value) for value in values) / len(text_fields)