我有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'作为值返回,而不是引用,所以不应该发生...... –