Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-使用.aggregate(Sum())结果减去字段值_Python_Django - Fatal编程技术网

python-使用.aggregate(Sum())结果减去字段值

python-使用.aggregate(Sum())结果减去字段值,python,django,Python,Django,我有两块地,总的年休假和每年的休假, 使用.aggregateSum,我计算了员工每年休假的总天数 但现在我想计算用户可用的剩余假期,即 总年休假-所休的总年休假 但我在做这件事时遇到了麻烦,因为每年的收入是一根弦,而不是一个浮点数 这给了我一个错误: -:“float”和“str”的操作数类型不受支持 我怎样才能解决这个问题?非常感谢您的帮助 下面是我的代码: model.py View.py def my_leaves_view(request): annual = LeavesEn

我有两块地,总的年休假和每年的休假, 使用.aggregateSum,我计算了员工每年休假的总天数

但现在我想计算用户可用的剩余假期,即

总年休假-所休的总年休假

但我在做这件事时遇到了麻烦,因为每年的收入是一根弦,而不是一个浮点数

这给了我一个错误:

-:“float”和“str”的操作数类型不受支持

我怎样才能解决这个问题?非常感谢您的帮助

下面是我的代码: model.py

View.py

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