python-使用.aggregate(Sum())结果减去字段值
我有两块地,总的年休假和每年的休假, 使用.aggregateSum,我计算了员工每年休假的总天数 但现在我想计算用户可用的剩余假期,即 总年休假-所休的总年休假 但我在做这件事时遇到了麻烦,因为每年的收入是一根弦,而不是一个浮点数 这给了我一个错误: -:“float”和“str”的操作数类型不受支持 我怎样才能解决这个问题?非常感谢您的帮助 下面是我的代码: model.py View.pypython-使用.aggregate(Sum())结果减去字段值,python,django,Python,Django,我有两块地,总的年休假和每年的休假, 使用.aggregateSum,我计算了员工每年休假的总天数 但现在我想计算用户可用的剩余假期,即 总年休假-所休的总年休假 但我在做这件事时遇到了麻烦,因为每年的收入是一根弦,而不是一个浮点数 这给了我一个错误: -:“float”和“str”的操作数类型不受支持 我怎样才能解决这个问题?非常感谢您的帮助 下面是我的代码: model.py View.py def my_leaves_view(request): annual = LeavesEn
def my_leaves_view(request):
annual = LeavesEntitlement.objects.all().filter(employee=request.user.profile.employee.id, type=1)
annual_taken = Leave.objects.all().filter(employee=request.user.profile.employee.id, type=1).aggregate(Sum('duration'))
for annual_field in annual:
for field in annual_taken:
annual_available = annual_field.days - field
context = {'form': form,
'annual': annual,
'annual_taken': annual_taken,
'annual_available': annual_available
}
return render(request, 'hrm/my_leaves/my_leaves_content.html', context)
HTML
在这个领域,你有一个口述,所以 通过一些重构,如果使用过滤器,则不需要全部,如果定义了employee,则代码可能会更具可读性:
employee = request.user.profile.employee.id
annual = LeavesEntitlement.objects.filter(employee=employee, type=1)
annual_taken = Leave.objects.filter(employee=employee, type=1).aggregate(Sum('duration'))
for annual_line in annual:
annual_available = annual_line.days - annual_taken.get('duration__sum', 0)
希望有帮助。聚合和返回一个键值对,因此您必须从dict获取值
annual_taken = Leave.objects.all()
.filter(employee=request.user.profile.employee.id,
type=1).aggregate(Sum('duration'))
然后
在代码中也有这个循环
for field in annual_taken:
annual_available = annual_field.days - field
这是错误的。您正在尝试迭代一个dict。删除此循环并使用sum_take将有效无需循环在您的问题中包含完整的回溯好的,请稍候。嗨@Bear Brown,它有效!非常感谢你的帮助!不知道为什么会有人投票否决你的答案很高兴帮助你人民
annual_taken = Leave.objects.all()
.filter(employee=request.user.profile.employee.id,
type=1).aggregate(Sum('duration'))
sum_taken = annual_taken.get('duration__sum')
for field in annual_taken:
annual_available = annual_field.days - field