Python 用一个表单更新多个对象
我正在造一辆购物车。我有Python 用一个表单更新多个对象,python,django,Python,Django,我正在造一辆购物车。我有产品型号和购物车项目型号: 类产品(models.Model): name=models.CharField(最大长度=64) description=models.TextField(空白=True) 单位=models.CharField(最大长度=16) 每单位价格=型号。小数点域(最大位数=11,小数点位=2) image=StdImageField(default=“default.jpg”,变体={ '缩略图':{“宽度”:100,“高度”:100,“裁剪”:
产品
型号和购物车项目
型号:
类产品(models.Model):
name=models.CharField(最大长度=64)
description=models.TextField(空白=True)
单位=models.CharField(最大长度=16)
每单位价格=型号。小数点域(最大位数=11,小数点位=2)
image=StdImageField(default=“default.jpg”,变体={
'缩略图':{“宽度”:100,“高度”:100,“裁剪”:True}
})
定义(自我):
返回self.name
类别ShoppingCartItem(models.Model):
user=models.ForeignKey(django\u settings.AUTH\u user\u MODEL,相关的\u name='cart\u items',on\u delete=models.CASCADE)
product=models.ForeignKey(产品,on_delete=models.CASCADE)
数量=型号。正整数字段(默认值=1)
#更新购物车中商品的数量
def更新_数量(自身、数量):
如果quantity我知道,为更新数据库进行多个查询不是一个好主意,并且您希望在一次调用中更新多个objects属性。但是,如果属性值不同,在ORM中没有简单的方法来实现
您可以实施以下其中一项:
单一更新
一般来说,在数据库中使用主数据库的单个更新速度非常快,若更新的数量并没有那个么高,那个就足够了
def update_cart(user_id, cart):
for product_id, quantity in cart.items():
ShoppingCartItem.objects.get(user__id=user_id, product__id=product_id).update(quantity=quantity)
使用事务的单次更新
使用transaction.atomic
将所有更新分组到单个事务中。如果我们有大量的更新,这将优化数据库交互。我知道对更新数据库进行多个查询不是一个好主意,并且您希望在一次调用中更新多个对象属性。但是,如果属性值不同,在ORM中没有简单的方法来实现
您可以实施以下其中一项:
单一更新
一般来说,在数据库中使用主数据库的单个更新速度非常快,若更新的数量并没有那个么高,那个就足够了
def update_cart(user_id, cart):
for product_id, quantity in cart.items():
ShoppingCartItem.objects.get(user__id=user_id, product__id=product_id).update(quantity=quantity)
使用事务的单次更新
使用transaction.atomic
将所有更新分组到单个事务中。如果我们有大量的更新,这将优化数据库交互