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



我认为这是Django中的一个棘手的问题。

这行不通:

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

如果我检查cartitemproduct_in_cart_session.get()的值。数量,没有更新

这是:

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()。数量,字段数量成为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 + = 1cartitem_session.save ()

等价于:

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

最新更新