[Answer]-Correctly aggregating model objects and simple view calculation

1👍

ok, so this wasn’t as difficult as I thought. The first challenge was to get an aggregate sum of objects. My first attempt was close but I should have just used “Sum” as opposed to “Count”:

agg_pto = LeaveRequest.objects.filter(employee=id).aggregate(Sum('total_days'))

then I just used the python method for extracting the value from a dictionary:

agg_pto = agg_pto['total_days__sum']

finally:

def leave_screen(request, id):
    user = request.user.id
    profile = request.user.get_profile()
    records = LeaveRequest.objects.filter(employee=id).order_by('-submit_date')
    agg_pto = LeaveRequest.objects.filter(employee=id).aggregate(Sum('total_days'))
    agg_pto = agg_pto['total_days__sum']
    allotted_pto = profile.allotted_pto
    if allotted_pto: #if the allotted_pto field in UserProfile is not empty
            remaining_pto = allotted_pto - agg_pto
    else:
            remaining_pto = "na"
    supervised_records = LeaveRequest.objects.filter(supervisor=id).order_by('-submit_date')
    return render_to_response("vacation/leave_request.html", {'records': records, 'supervised_records': supervised_records, 'agg_pto': agg_pto, 'allotted_pto': allotted_pto, 'remaining_pto': remaining_pto, 'profile': profile })

I don’t know why it was so hard for me to figure out the syntax for pulling objects from the UserProfile. But I do know that the django-debug-toolbar is very helpful.

Leave a comment