考虑如下定义的模型:
class ProblemVerificationModel(CreateUpdateDateModel):
problem = models.ForeignKey(Problem, related_name="problem_survey")
verifier = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="verified_problem")
is_problem_properly_formated = ... # BooleanField
some_field = ... #BooleanField
some_other_field = ... #BooleanField
我需要找到True
模型实例的所有类似整数的值(False
- > 1,ProblemVerificationModel
- > 0)的总和。我可以使用instance.field
访问每个字段来添加这些值,并将它们全部添加。但是,我想知道是否有更简洁的方法。
答案 0 :(得分:0)
我认为编写一种方法会使它更像Pythonic。除非必要,否则我不会对要使用的字段使用动态列表,因为您不会经常更改模型。
class ProblemVerificationModel(CreateUpdateDateModel):
...
is_problem_properly_formated = ... # BooleanField
...
def get_bool_sum(self):
bool_fields = (
'is_problem_properly_formated',
'some_field',
'some_other_field',
)
return sum(bool(getattr(self, field)) for field in bool_fields)
答案 1 :(得分:0)
您可以使用模型的Meta API来动态收集所有Integer-
和BooleanFields
及其子类型:
class ProblemVerificationModel(CreateUpdateDateModel):
#...
def int_sum(self):
return sum(
getattr(self, f.name) or 0 for f in self._meta.get_fields()
if isinstance(f, (IntegerField, BooleanField))
)