Py学习  »  Django

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

saum • 5 年前 • 1641 次点击  

我有两个关于多对多关系的模型,我正试图从另一个模型的另一个字段减去模型上的一个字段。我很难想出怎么做。我正在尝试从LeaveBalance模型中减去LeaveBalance模型中的当前休假余额和NewLeave模型中的总工作日。

我添加了处理主管请假批准的功能。有两个授权人。第一个授权人是经理,第二个授权人是董事。经理批准请假后,再将请假转交董事批准。我想在主管批准后调整请假余额。到目前为止,这两个批准都有效,但我希望在主管批准休假后,能够调整休假当前余额。

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”对象没有“save”属性

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49929
 
1641 次点击  
文章 [ 1 ]  |  最新文章 5 年前