>>> type(Person.objects.all())
<class 'django.db.models.query.QuerySet'>
>>> pa = Person.objects.all() # Not evaluated yet - lazy
>>> type(pa)
<class 'django.db.models.query.QuerySet'>
БД запрашивает у вас объект Person
>>> pa[2]
БД снова запросил, чтобы дать вам еще один объект Person.
>>> pa[2].first_name = "Blah"
Давайте назовем этот экземпляр PersonObject1, который находится в памяти. Так что это эквивалентно примерно так:
>>> PersonObject1.first_name = "Blah"
Теперь давайте сделаем это:
>>> pa[2].save()
PA [2] снова запрашивает DB и возвращает другой экземпляр объекта person, например, PersonObject2 Который будет неизменным! Так что эквивалентно называть что-то вроде:
PersonObject2.save()
Но это не имеет ничего общего с PersonObject1.