def cumulate(self, dataset):
nb = 0
for i in range(dataset.count()):
nb += dataset[i]['nb']
dataset[i]['nb'] = 99
print(dataset[i]['nb'])
return dataset
为什么打印原始值而不是打印99?
答案 0 :(得分:1)
目前,Django正在执行单独的查询来获取每个人dataset[i]
,并在评估dataset
时进行最终查询。
解决方案是通过将查询集转换为列表来强制对其进行评估。您必须使用len()
代替count()
。
def cumulate(self, dataset):
dataset = list(dataset)
nb = 0
for i in range(len(dataset)):
nb += dataset[i]['nb']
dataset[i]['nb'] = 99
print(dataset[i]['nb'])
return dataset
迭代查询集而不是遍历范围会更加pythonic。在这种情况下,循环查询集将导致对其进行评估,并且我认为您不必将其转换为列表。
def cumulate(self, dataset):
nb = 0
for d in dataset:
nb += d['nb']
d['nb'] = 99
print(d['nb'])
return dataset