2017-06-03 56 views
0

如果我用我的看法是這樣的:的Python/Django的如何避免在內存中更新QuerySet對象,同時更新數據庫

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

上下文變量order_list工作正常,它呈現的模板, 但獲得後的查詢集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對象也被更新?難道我做錯了什麼?

回答

1

我不認爲你本身做錯了什麼,但它只是Django處理查詢集的方式。所以,當你做

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

的查詢集僅作評估「標記」,而實際發生的評價,當你試圖處理模板的記錄。

就是這個原因,當你做

Order.objects.filter(id__in=order).update(status='warning') 

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


它看起來像你試圖更新狀態,以'警告'如果一個對象已被查看 - 正確嗎?

如果是這樣,你可以處理的一種方法是 - 一旦頁面被渲染,你可以發送一個ajax請求來更新ID列表的狀態。

又一個小有效的方法是評估更新前的查詢集 - 是這樣的:

context['order_list'] = list(order) 
+0

明白了!但是有沒有辦法在評估之前保留查詢集並將其發送到模板? –

+0

是。檢查更新 – karthikr

+0

抱歉,無知,但我怎麼做?哈哈,我真的是Django的新手。 –

相關問題