问题
:
qs
是一个
QuerySet
. 如果你写信
qs[i]
,你实际上
另一个问题
(看起来像
<OLD QUERY> LIMIT 1 OFFSET i
),所以你把
我
-这个元素从旧的queryset进入内存。
关键是如果你写
质量标准[i]
两次,两次
独立的
抓取。如果我们这样写两个
qs[1]
s、 我们得到两个
不同的
物体。如果你这样做
qs[1].save()
,您将进行独立的提取,从数据库中加载对象,然后立即保存它。但之前未保存的修改将无效。
如果因此要更改对象,则需要使用引用,因此请编写:
# will change the second element
cs1 = cs[1] # we fetch the object, and store it in cs1
cs1.foo = True # we change the object
cs1.save() # we save the object
而不是:
cs[1].foo = True
cs[1].save()
在许多数据库引擎中,两个查询之间对象的顺序改变是很常见的(通常给定一些行被更新,或者即使创建了一个新行)。这取决于数据库如何获取行的索引,并且通常更改的行将作为结果集中的最后(或第一)行出现,尽管如果不指定顺序,通常没有
坚强的
保证结果如何排序。