我已根据数量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
字段之外,我没有发现任何错误。因此,总数是错误的答案。
我做错了什么?
答案 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())