【问题标题】:How to save other data after form_valid action in django UpdateView?如何在 django UpdateView 中的 form_valid 操作后保存其他数据?
【发布时间】:2016-04-30 16:37:51
【问题描述】:

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

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 下注释掉的行。我对这些行可以正常工作并不感到困惑,但我需要在保存当前模型后执行它们,因为它们取决于当前模型的值。

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

我做错了什么?

【问题讨论】:

  • 抱歉,我有点不清楚:为什么不先保存另一个模型再保存这个模型?
  • @Wtower 因为另一个模型的数据是这个模型的数据的输出。所以如果先保存,另一个模型会包含错误的数据。

标签: django view model


【解决方案1】:

调用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())

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 2020-08-12
    • 2014-02-01
    • 1970-01-01
    • 2019-06-21
    • 2021-09-22
    • 2023-03-17
    • 2021-11-15
    相关资源
    最近更新 更多