2017-02-27 3 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 

Warum druckt das Original Werte statt 99 zu drucken?Django-Queryset-Element kann nicht geändert werden?

+2

Ist 'Dataset' ein Queryset oder ist es etwas anderes? Wie geschrieben, gibt es hier nichts spezifisch Django. Was versuchst du zu erreichen? – Sayse

+0

Ich versuche, Elemente des Datasets zu ändern. Dataset ist ein Django-Abfrage-Set. Mit der values-Methode können wir iterate für Elemente als Wörterbücher verwenden – user2080105

+0

Werte "Gibt ein QuerySet zurück, das Wörterbücher zurückgibt" was nicht ganz dasselbe ist, ich bin mir immer noch nicht ganz sicher, was Sie gerade versuchen – Sayse

Antwort

1

Derzeit führt Django eine separate Abfrage zum Abrufen jeder einzelnen dataset[i] und eine abschließende Abfrage, wenn dataset ausgewertet wird.

Die Lösung besteht darin, den Abfragesatz zu erzwingen, indem er in eine Liste konvertiert wird. Sie müssen len() anstelle von count() verwenden.

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 

Es wäre pythonischer, über das Abfrage-Set zu iterieren, anstatt den Bereich zu durchlaufen. In diesem Fall führt eine Schleife über das Abfrage-Set dazu, dass es ausgewertet wird, und ich denke nicht, dass Sie es in eine Liste konvertieren müssen.

def cumulate(self, dataset): 
    nb = 0 
    for d in dataset: 
     nb += d['nb'] 
     d['nb'] = 99 
     print(d['nb']) 
    return dataset 
Verwandte Themen