save()不更新数据库中的表

时间:2019-07-26 11:13:29

标签: django

每次用户访问页面时,我必须更新数据库中的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()

任何人都可以告诉代码第二部分有什么问题。它不是在更新数据库。

1 个答案:

答案 0 :(得分:2)

每次写入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]来批量更新可迭代的对象。