django queryset元素无法更改?

时间:2017-02-27 14:58:42

标签: python django

 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?

1 个答案:

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