如何以多对多关系在Django模型的两个字段之间执行计算

时间:2019-02-06 09:42:00

标签: python django python-3.x django-templates django-views

我有两个存在多对多关系的模型,我试图从另一个模型的另一个字段中减去一个模型的一个字段。我在弄清楚如何做到这一点时遇到了麻烦。我正在尝试从NewLeave模型的Total_working_days的LeaveBalance模型中减去Leave_current_balance。

我添加了处理主任休假批准的功能。有两个授权者。第一授权者是经理,第二授权者是主任。如果经理批准了请假,则将其转发给主任以供其批准。我想在离开主管批准后调整Leave_current_balance。到目前为止,这两种批准都有效,但是我希望一旦主任批准了休假,就可以调整Leave_current_balance。

class LeaveBalance(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True,)
    Leave_current_balance= models.FloatField(null=True, blank=True, default=None)
    Year=models.CharField(max_length=100,default='')
    def __unicode__(self):
             return  self.Year


class NewLeave(models.Model):
      user=models.ForeignKey(User,default='',on_delete=models.CASCADE)
   leave_balance=models.ManyToManyField(Leave_Balance)
    Leave_type=models.CharField(max_length=100,blank=False,default='')
    Total_working_days=models.FloatField(null=True,  blank=False)
    def __unicode__(self):
        return  self.Leave_type




@login_required()
def unitDirectorForm(request,id):
    if request.method=='POST':
        getstaffid=NewLeave.objects.get(id=id)
        form=DirectorForm(request.POST,instance=getstaffid)

        if form.is_valid():
            form.save()

            return HttpResponse('You have successfully approved the leave')

    else:
        getstaffid=NewLeave.objects.get(id=id)
        form=DirectorForm(instance=getstaffid)
    return render(request,'managerauthorisedform.html',{'form':form})






@receiver(post_save, sender=NewLeave)
def update_leave_balance(sender, instance, **kwargs):
    if NewLeave.objects.filter(Director_Authorization_Status='Approved'):
        leave_balance_object = Leave_Balance.objects.get(user=instance.user_id)
        leave_balance_object = F('Leave_current_balance') - instance.Total_working_days
        leave_balance_object.save()

在信号中,我已经在执行计算之前检查了董事的批准。但是,代码生成了一条错误消息:“ CombinedExpression”对象没有属性“保存”

1 个答案:

答案 0 :(得分:0)

如果我没记错,那么每当用户有一个newLeave条目时,您都希望从LeaveBalance的{​​{1}}中调整Leave_current_balance模型的newLeave。我认为实际上Total_working_days模型中不需要leave_balance。您可以通过newLeave模型信号简单地进行调整(如果您不知道django信号link1 link2,请通过以下链接进行调整)。

newLeave模型的post_save信号中,我们可以调整特定用户的 newLeave如下。

Leave_current_balance