如何从updatevi更新另一个模型字段

2024-05-14 09:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用更新视图中字段的当前值来更新另一个字段?在

我有个模范员工。它有一个字段day_absent和amount_existed,显示基于缺勤天数的总扣除金额。在

在更新视图中,可以设置缺席的日期。 当我可以回到DetailView时,假设您缺席的日期是1。但扣除额还是0。我知道这是因为在save()之前,day_leavent仍然是0,并改为1。所以问题是在day_不存在的情况下,我如何计算它被保存之前输入的值?在

class PayrollTransactionUpdate(LoginRequiredMixin,UpdateView):
    model = t_pay
    template_name = 'payroll/transaction/update.html'
    fields = ['day_absent']


  def post(self,request,pk):
        emp = t_pay.objects.get(pk=pk)
        emp.amt_absent = emp.day_absent * emp.amt_rate
        emp.save()
        return super().post(request)

Tags: 视图requestsave员工postamountpaypk
1条回答
网友
1楼 · 发布于 2024-05-14 09:25:39

UpdateView将对象保存在form_valid()方法中。使用基于Django类的视图时,请看this invaluable site。在

所以您应该重写form_valid()方法,而不是post()方法:

def form_valid(self, form):
    emp = form.save(commit=False)
    emp.amt_absent = emp.day_absent * emp.amt_rate
    emp.save()
    self.object = amp
    return super().form_valid(form)

请注意,不建议将一个字段保存到Employee,因为这可能导致数据不一致/损坏。既然amt_absent只是另外两个字段的乘法,为什么需要保存它?在

或者,看看你实际在做什么,这似乎不是视图的责任。如果每次保存Employee时都会发生这种情况,则可以在模型本身上执行此操作:

^{pr2}$

在这种情况下,不需要重写UpdateView上的任何内容。在

相关问题 更多 >

    热门问题