如果我使用我的观点:
def test(request):
order = Order.objects.filter(status='new')
context = {}
context['order_list'] = order
return render(request, 'checkout/order.html',context)
上下文变量order_list
工作正常,它在模板上呈现,
但在得到queryset objet order
之后我想更新数据库,所以我这样做了:
def test(request):
order = Order.objects.filter(status='new')
context = {}
context['order_list'] = order
Order.objects.filter(id__in=order).update(status='warning') #added this line
return render(request, 'checkout/order.html',context)
更新在数据库上工作正常,但也更改了我的上下文变量oder_list
,它在模板上变为空。
为什么order
对象也会更新?我做错了吗?
答案 0 :(得分:1)
我不认为你本身做错了什么,但这只是Django处理查询集的方式。所以当你这样做时
order = Order.objects.filter(status='new')
查询集仅标记为""用于评估,而当您尝试处理模板中的记录时,会发生实际评估。
这就是你做的时候的原因
Order.objects.filter(id__in=order).update(status='warning')
上下文变量具有反映更新的值。
您似乎正在尝试将状态更新为警告'如果一个对象已被查看 - 是否正确?
如果是这样,你可以采用的一种方法是 - 一旦页面被渲染,你可以发送一个ajax请求来更新id列表的状态。
另一种效率较低的方法是在更新之前评估查询集 - 例如:
context['order_list'] = list(order)