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()
我认为 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()