2017-02-27 10 views
0
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を印刷するのではなく、元の値を印刷するのですか?djangoクエリーセット要素は変更できません。

+2

'dataset'はクエリーセットですか、それとも別のものですか?書かれているようにここには特別なジャンゴは何もありません。あなたは何を達成しようとしていますか? – Sayse

+0

私はデータセットの要素を変更しようとしています。 datasetはdjangoクエリーセットです。値のメソッドを使用して辞書として要素を反復することができます – user2080105

+0

値は「全く同じではない辞書を返すQuerySetを返します」私はまだそれが何をしようとしているか完全にはわからない – Sayse

答えて

1

現在、Djangoは個別のクエリを実行してdataset[i]を個別に取得し、最終クエリはdatasetと評価されます。

解決策は、クエリーセットを強制的にリストに変換して評価することです。 count()の代わりにlen()を使用する必要があります。

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 

範囲をループするのではなく、クエリーセットを反復するのは非常に難しいでしょう。この場合、クエリーセットをループすると評価され、リストに変換する必要はありません。

def cumulate(self, dataset): 
    nb = 0 
    for d in dataset: 
     nb += d['nb'] 
     d['nb'] = 99 
     print(d['nb']) 
    return dataset 
関連する問題