2017-02-27 83 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 queryset元素無法更改?

+2

數據集是查詢集還是別的東西?正如所寫的,這裏沒有任何django特定的。你想達到什麼目的? – Sayse

+0

我正在嘗試更改數據集的元素。數據集是一個Django查詢集。使用值方法,我們可以使用迭代元素作爲詞典 – user2080105

+0

值「返回返回字典的QuerySet」,這不是完全相同的事情,我仍然不完全確定你要做什麼 – Sayse

回答

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