这不起作用:
>>> pa = Person.objects.all() >>> pa[2].nickname u'arst' >>> pa[2].nickname = 'something else' >>> pa[2].save() >>> pa[2].nickname u'arst'
但是,如果你服用,它就有效
p = Person.objects.get(pk=2)
并改变缺口.
为什么这样.
>>> type(Person.objects.all())>>> pa = Person.objects.all() # Not evaluated yet - lazy >>> type(pa)
DB查询给你一个Person对象
>>> pa[2]
DB再次查询给你另一个Person对象.
>>> pa[2].first_name = "Blah"
我们将此实例称为驻留在内存中的PersonObject1.所以它相当于这样的东西:
>>> PersonObject1.first_name = "Blah"
现在让我们这样做:
>>> pa[2].save()
pa [2]再次查询db并返回person对象的另一个实例,例如PersonObject2.哪个会保持不变!所以它与调用类似的东西是等价的:
PersonObject2.save()
但这与PersonObject1无关.