2016-01-24 60 views
3

我已根據數量qty字段使用以下代碼成功更改了我的對象中的特定字段net如何在django UpdateView的form_valid操作後保存其他數據?

class OrderDetailsProductEdit(UpdateView): 
    model = OrdersPlaced 
    fields = ['qty'] 
    template_name = 'backend/order-details-product-edit.html' 
    success_url = '../../../' 

    def form_valid(self, form): 
     form.instance.net = form.instance.qty * form.instance.price 
     # order = Order.objects.get(pk=self.kwargs['order_id']) 
     # subtotal = OrdersPlaced.objects.filter(order=order).aggregate(Sum('net'))['net__sum'] 
     # order.subtotal = subtotal 
     # order.save() 
     return super(OrderDetailsProductEdit, self).form_valid(form) 

但是,我也試圖改變ANOTHER模型中的數據。準確地說,我想要查詢的所有net值的總和,並更新另一個表中的subtotal字段。

請注意def form_valid下的註釋行。我對這些線路沒有任何困惑,但我需要它們在保存當前模型後執行,因爲這些模型取決於當前模型的值。

我不覺得比之前的電流模式net字段保存在另一種模式的subtotal場計算之外的任何錯誤。因此,總數是錯誤的答案。

我在做什麼錯?

+0

對不起,有點不清楚對我說:爲什麼在保存這個模型之前不要保存另一個模型嗎? – Wtower

+0

@Wower,因爲其他模型的數據是該模型數據的輸出。因此,如果首先保存其他模型將包含錯誤的數據。 – MiniGunnR

回答

5

只需自行移動指令調用超級

def form_valid(self, form): 
     form.instance.net = form.instance.qty * form.instance.price 
     redirect_url = super(OrderDetailsProductEdit, self).form_valid(form) 
     order = Order.objects.get(pk=self.kwargs['order_id']) 
     subtotal = OrdersPlaced.objects.filter(order=order).aggregate(Sum('net'))['net__sum'] 
     order.subtotal = subtotal 
     order.save() 
     return redirect_url 

後或只是做調用super不(保存模型,並重定向到success_url

def form_valid(self, form): 
     form.instance.net = form.instance.qty * form.instance.price 
     self.object = form.save() 
     order = Order.objects.get(pk=self.kwargs['order_id']) 
     subtotal = OrdersPlaced.objects.filter(order=order).aggregate(Sum('net'))['net__sum'] 
     order.subtotal = subtotal 
     order.save() 
     return HttpResponseRedirect(self.get_success_url()) 
+1

謝謝你!像魅力一樣工作。 – MiniGunnR