我正在尝试创建一个进度条功能,在该功能中,您可以通过在个人资料中插入哪些数据来告诉您进度。这个想法是将所有空字段都减去,然后从字段总数中减去。
如何获取所有空字段并将其作为数字返回?
答案 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)