Python/Django如何避免在更新数据库时更新内存中的queryset对象

2024-04-24 10:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我这样用我的观点:

def test(request):
    order = Order.objects.filter(status='new')
    context = {}
    context['order_list'] = order
    return render(request, 'checkout/order.html',context)

上下文变量order_list工作正常,它在模板上呈现, 但是在得到queryset对象之后,order我想更新数据库,所以我这样做了:

^{pr2}$

更新在数据库上运行良好,但也更改了我的上下文变量oder_list,它在模板上变为空。 为什么order对象也被更新?我做错什么了吗?在


Tags: 对象test模板数据库newobjectsrequestdef
1条回答
网友
1楼 · 发布于 2024-04-24 10:26:31

我不认为你做了什么错事,但这只是Django处理查询集的方式。所以当你这么做的时候

order = Order.objects.filter(status='new')

queryset只“标记”以供计算,而实际求值发生在您尝试处理模板中的记录时。在

这就是原因,当你这么做的时候

^{pr2}$

上下文变量具有反映更新的值。在


如果某个对象已被查看,您似乎正在尝试将状态更新为“警告”-正确吗?在

如果是这样的话,您可以处理这个问题的一种方法是-一旦页面被呈现,您就可以发送一个ajax请求来更新id列表的状态。在

另一种效率较低的方法是在更新之前评估queryset—类似于:

context['order_list'] = list(order)

相关问题 更多 >