Django save()不更新数据库中的表
每次用户访问一个页面时,我必须更新数据库中的2个表 这起作用了:Django save()不更新数据库中的表,django,database,django-2.2,Django,Database,Django 2.2,每次用户访问一个页面时,我必须更新数据库中的2个表 这起作用了: order_order = OrderTable.no_objects.get(order_number=order_id) order_order.status = 'updated status' order_order.save() 这不起作用:(通过外键与第一个表相关) 有人能说出代码第二部分的错误吗。它不会更新数据库。每次编写订单项目[i]时,您都会进行单独的提取,并从数据库返回一个ItemsTable项目。这意味着
order_order = OrderTable.no_objects.get(order_number=order_id)
order_order.status = 'updated status'
order_order.save()
这不起作用:(通过外键与第一个表相关)
有人能说出代码第二部分的错误吗。它不会更新数据库。每次编写
订单项目[i]
时,您都会进行单独的提取,并从数据库返回一个ItemsTable
项目。这意味着,如果设置该对象的.qty=…
属性,它将被忽略,因为下一个order\u项[i]
将触发新的获取。您的order\u 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()
order\u items=ItemsTable.objects.filter(order\u id\u order\u number=order\u id)
对于i,枚举中的订单项(订单项):
订单\项目数量=i+5
订单\项目数量\下个月=i+30
订购物品。保存()
这也更有效,因为在queryset上枚举会强制求值,因此可以一次获取所有对象
截至,您可以使用,批量更新对象的iterable。通过使用
[i]
每次进行单独的提取。这是一个错误。”ItemsTable对象不可编辑。它应该是order\u items
。您是否更改了使用.get()
而不是.filter()
?不,我使用的是filter。我不知道为什么它说filter()对象不可iterable。@sandeep:它并没有说,在某个地方你迭代了一个ItemsTable
对象,所以类似于的。。。在某些\u itemtableobject:
中,我很确定这不在这里发布的代码片段中。@sandeep:如果您保留对该对象的引用,例如my\u obj=order\u items[I],它肯定会起作用;我的对象数量=42;my_obj.save()
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()