如何在django UpdateView中的form_valid操作后保存其他数据?

时间:2016-01-24 10:08:19

标签: django view model

我已根据数量net字段使用以下代码成功更改了对象中的特定字段qty

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)

但是,我也在尝试更改另一个模型中的数据。确切地说,我想要查询查询的所有net值,并更新另一个表中的subtotal字段。

请注意def form_valid下注释掉的行。我没有混淆这些线是有效的,但我需要它们在保存当前模型后执行,因为它们取决于当前模型的值。

除了在保存当前模型中的subtotal字段之前计算另一个模型中的net字段之外,我没有发现任何错误。因此,总数是错误的答案。

我做错了什么?

1 个答案:

答案 0 :(得分:7)

在调用super

之后简单地移动指令
    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())