Ich habe interessante Erfahrungen mit value_list
und ich weiß nicht, warum es auf diese Weise handelt.Wie funktioniert values_list django?
Ich möchte jeden Wert in TestObject
hat value_1
zu value_2
und jeden Wert_2 zu Wert_1. Wobei value_1
und value_2
vom Typ Wert und TestObject
einen Fremdschlüssel zu Value hat.
Dies ist mein Code:
def _swap(value_1, value_2):
from_values_ids = TestObject.objects.filter(value=value_1).values_list('id', flat=True)
to_values_ids = TestObject.objects.filter(value=value_2).values_list('id', flat=True)
TestObject.objects.filter(id__in=from_values_ids).update(value=value_2)
TestObject.objects.filter(id__in=to_values_ids).update(value=value_1)
ich mit Testobject getestet hat value_1
aber hat keine value_2
. Das Endergebnis war nichts passiert nach dem Ausführen dieser Funktion. Nach der Untersuchung fand ich die Testobject zu value_2
aktualisiert wurde nach dem Lauf:
TestObject.objects.filter(id__in=from_values_ids).update(value=value_2)
aber es kehrte zurück
TestObject.objects.filter(id__in=to_values_ids).update(value=value_1)
nach dem Laufen dachte ich kann to_values_ids
faul Last hat, der Grund, warum ich print to_values_id
hinzugefügt ist.
def _swap(value_1, value_2):
from_values_ids = TestObject.objects.filter(value=value_1).values_list('id', flat=True)
to_values_ids = TestObject.objects.filter(value=value_2).values_list('id', flat=True)
print to_values_ids
TestObject.objects.filter(id__in=from_values_ids).update(value=value_2)
TestObject.objects.filter(id__in=to_values_ids).update(value=value_1)
Aber ich habe das gleiche Ergebnis. Obwohl mein Druck für to_values_ids
[]
hat.
Die Art, wie ich es repariere Ich habe neue Listen mit den IDs erstellt und es hat funktioniert, aber muss immer noch den Kern Python verstehen, wie es funktioniert? Jede gute Erklärung.
Versuchen Sie beide zu drucken. Wenn deine 'to_values_ids = []' bedeutet, dass du nichts aktualisierst! –
Die Liste to_values_ids vor zwei Aktualisierungen ist leer, aber nach dem Ausführen von TestObject.objects.filter (id__in = from_values_ids) .update (value = value_2) wurde sie geändert. Warum ist das passiert? – amm
'QuerySets' werden als Werte zurückgegeben, nicht als Referenzen, also sollte das nicht passieren ... –