Django orm 正在创建实例的副本而不是访问它

Django orm is creating a copy of instance instead of accessing it

我认为 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 是一个查询集,过滤器的结果,但我认为这无关紧要:cartitemproduct_in_cart_session=cart_session.cartitem_set.filter(product__slug=cartitem.product.slug) )

我猜想,当我执行 cartitemproduct_in_cart_session.get().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

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()