Django orm создает копию экземпляра вместо доступа к нему

У меня есть, как мне кажется, довольно сложный вопрос в Django, и это orm.

Это не работает :

cartitemproduct_in_cart_session.get().quantity+=1

cartitemproduct_in_cart_session.get().save()

Если я проверю сразу после этого значение cartitemproduct_in_cart_session.get().quantity, оно не было обновлено

Это работает :

cartitem_session=cartitemproduct_in_cart_session.get()

cartitem_session.quantity+=1

cartitem_session.save()

Значение было обновлено

Но почему?

(cartitemproduct_in_cart_session - queryset, результат фильтра, но я думаю это не имеет значения : cartitemproduct_in_cart_session=cart_session.cartitem_set.filter(product__slug=cartitem.product.slug) )

Я предполагаю, что каким-то образом, когда я делаю cartitemproduct_in_cart_session.get().quantity, поле quantity становится новым атрибутом cartitemproduct_in_cart_session.get() и больше не связано с полем в базе данных, но я не понимаю, почему...

Почему необходимо сначала присвоить экземпляру модели имя, чтобы обновить поля этого экземпляра?

cartitemproduct_in_cart_session.get().quantity+=1

cartitemproduct_in_cart_session.get().save()

эквивалентно:

x = cartitemproduct_in_cart_session.get()
x.quantity += 1

y = cartitemproduct_in_cart_session.get()
y.save()
# note that x and y are different objects with different memory addresses

while

cartitem_session=cartitemproduct_in_cart_session.get()

cartitem_session.quantity+=1

cartitem_session.save()

эквивалентно:

x = cartitemproduct_in_cart_session.get()
x.quantity += 1
x.save()
Вернуться на верх