我有value_list
有趣的經驗,我不知道爲什麼它以這種方式行事。values_list django如何工作?
我想更新TestObject
中的任何值,其中value_1
爲value_2
,任何value_2值爲value_1。其中value_1
和value_2
來自Value並且TestObject
具有Value的外鍵。
這是我的代碼:
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)
我的TestObject試驗時,有value_1
,但沒有任何value_2
。 運行此功能後,最終結果沒有任何發生。經過調查,我發現的TestObject得到運行後更新爲value_2
:
TestObject.objects.filter(id__in=from_values_ids).update(value=value_2)
但它運行
TestObject.objects.filter(id__in=to_values_ids).update(value=value_1)
我想之後返回可能to_values_ids
具有延遲加載,這就是爲什麼我添加print to_values_id
。
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)
但是我得到了同樣的結果。雖然我的打印to_values_ids
有[]
。
我解決這個問題,我創建一個新的列表與IDS和它的工作,但仍然需要了解核心Python中是如何工作的呢?任何好的解釋。
嘗試打印兩者。如果你的'to_values_ids = []'這意味着你沒有更新任何東西! –
兩次更新之前的列表to_values_ids是空的,但在運行TestObject.objects.filter(id__in = from_values_ids).update(value = value_2)後,它已更改。爲什麼會發生? – amm
'QuerySets'作爲值返回,而不是引用,所以不應該發生...... –