社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

saum • 5 年前 • 1629 次点击  

我有两个关于多对多关系的模型,我正试图从另一个模型的另一个字段减去模型上的一个字段。我很难想出怎么做。我正在尝试从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
 
1629 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Shakil
Reply   •   1 楼
Shakil    6 年前

如果我没有错,只要用户有 newLeave 要调整的条目 LeaveBalance 模特的 Leave_current_balance 新叶 Total_working_days . 在我看来事实上没有必要 leave_balance 在里面 新叶 模型。你可以简单地调整 新叶 模型信号(如果您不知道django信号,请通过这些链接 link1 link2 ).

新叶 模型保存后的信号我们可以调整特定用户的 保留当前余额 如下所示。

from django.db.models import F
from .models import NewLeave, LeaveBalance
@receiver(post_save, sender=NewLeave)
def update_leave_balance(sender, instance, **kwargs):
    leave_balance_object = LeaveBalance.objects.get(user=instance.user_id)
    leave_balance_object = F('Leave_current_balance') - instance.Total_working_days
    leave_balance_object.save()