首页 > 解决方案 > save() 不更新数据库中的表

问题描述

每次用户访问页面时,我都必须更新数据库中的 2 个表。

这是有效的:

order_order = OrderTable.no_objects.get(order_number=order_id)

order_order.status = 'updated status'
order_order.save()

这不起作用:(通过外键与第一个表相关)

order_item = ItemsTable.objects.filter(order_id__order_number=order_id)
for i in range(order_item.count()):
        order_item[i].qty = i + 5
        order_item[i].qty_nextMonth = i + 30
        order_item[i].save()

谁能告诉代码的第二部分出了什么问题。它没有更新数据库。

标签: djangodatabase

解决方案


每次编写order_item[i]时,都会进行一次单独的提取,并ItemsTable从数据库中返回一个项目。这意味着如果您设置该.qty = ...对象的属性,它会被忽略,因为下一个order_item[i]将触发新的提取。您order_item[i].save()更新数据库中的记录,但使用仅从数据库中获取的值。

最好简单地遍历查询集,从而维护对同一 ItemsTable对象的引用:

order_items = ItemsTable.objects.filter(order_id__order_number=order_id)
for i, order_item in enumerate(order_items):
        order_item.qty = i + 5
        order_item.qty_nextMonth = i + 30
        order_item.save()

这也更有效,因为枚举查询集会强制评估,因此您可以一次获取所有对象。

开始,您可以使用.bulk_update(..)[Django-doc]批量更新对象的可迭代对象。


推荐阅读