Calculations Between Models

52 views
Skip to first unread message

tech george

unread,
Apr 19, 2022, 11:34:33 AM4/19/22
to django...@googlegroups.com
Hello,

I have a model Staff and LeaveReportStaff, I wanted to get leave_balance between Total_Leave_Days and leave_days.

Please advise the best way forward.

class Staff(models.Model):
Total_Leave_Days = models.PositiveIntegerField(default=0)
course = models.ForeignKey(Course, on_delete=models.DO_NOTHING, null=True, blank=False)
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
class LeaveReportStaff(models.Model):
staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
start_date = models.DateField()
end_date = models.DateField()
leave_type = models.CharField(choices=LEAVE_TYPE, max_length=25, null=True, blank=False)
@property
def leave_days(self):
return (self.end_date - self.start_date).days

@property
def leave_balance(self):
return (self.Total_Leave_Days - self.leave_days)

Derek

unread,
Apr 20, 2022, 10:50:25 AM4/20/22
to Django users
Not sure what the "@aproperty" are here for, but in your views.py file, you could do this calculation, passing in the ID of the staff record:

from .models import Staff, LeaveReportStaff

def get_leave_balance(staff_id):
    total_leave_days = Staff.objects.get(pk=staff_id)
    leave_reports = LeaveReportStaff.objects.filter(staff=staff_id)
    total_leave_reports = 0
    for leave in leave_reports:
        total_leave_reports = total_leave_reports + (leave.end_date - leave.start_date).days
    return total_leave_days - total_leave_reports  # leave balance

techg...@gmail.com

unread,
Apr 22, 2022, 2:04:03 AM4/22/22
to Django users
Hello Derek,

Your solution worked, I appreciated the help.

Regards.

Reply all
Reply to author
Forward
0 new messages