实现prefetch_related()方法后如何追加键和值

Phi*_*tua 5 django django-views python-3.x django-rest-framework

我已经实现了一个基于类的视图,其中包含一个GET获取每个工资单细节的方法id.如何将其添加到net_allowance工资单中,object以便JSON看起来像这样:

{
    "employee__user__id": 2,
    "payslip_no": "GGT5698",
    "employee__user__first_name": "Nick",
    "basic_salary__salary_value": 80000.0,
    "net_allowances": 5400.0,
    "total_deductions": 2500.0,
    "payment_mode__name": "Bank",
    "month_ending": "2018-03-16",
    "employee__user__last_name": "Cannon"
}



class PayrollView(APIView):

    def get(self, request, pk, format=None):
        try:

            payslip = Payslip.objects.filter(id=pk).prefetch_related('user', 'employee').values(
                'payment_mode__name', 'payslip_no', 'allowances__amount', 'deductions__amount', 'month_ending', 'basic_salary__salary_value', 'employee__user__last_name', 'employee__user__first_name', 'employee__user__id'
            )

            net_allowance = payslip.aggregate(
                net_allowance=Sum('allowances__amount'))
        except Exception as e:
            # print(e)
            return Response(data=e, status=status.HTTP_400_BAD_REQUEST)
        return Response(data=payslip, status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

itz*_*nTV 2

尝试这个

payslip = Payslip.objects.filter(id=pk).prefetch_related('user', 'employee')
result = payslip.aggregate(
    net_allowance=Sum('allowances__amount')).values(
    'payment_mode__name', 'payslip_no', 'allowances__amount','deductions__amount', 'month_ending', 'basic_salary__salary_value',
    'employee__user__last_name', 'employee__user__first_name', 
    'employee__user__id','net_allowance' 
) 
Run Code Online (Sandbox Code Playgroud)