I was doing some research about function vs class based views and I found out that class based views are quite efficient. I have the following code snippet and would like to convert the function based view into class based view. How do I implement this correctly?
@api_view(['GET'])
def get_payslip_detail(request, pk, format=None):
try:
payslip = list(Payslip.objects.filter(id=pk).values(
'payment_mode','payslip_no','month_ending','basic','id','employee'
))[0]
# accesss object from list above
# access from object get id which is an integer >>>>> id=payslip['employee']
employee = list(Employee.objects.filter(id=payslip['employee']).values(
'user','hr_number','basic','tax_id_number', 'department', 'designation','id'))[0]
payslip['emp'] = employee
bank_acc = list(BankAccount.objects.filter(account_owner=payslip['employee']).values(
'bank_acc_number','bank_id'
))[0]
# append extra key to emp
payslip['acc_no']= bank_acc['bank_acc_number']
bank_name= list(Bank.objects.filter(id=bank_acc['bank_id']).values('name'))[0]
# print(bank_name)
payslip['bank_name'] = bank_name['name']
allowances = Allowance.objects.filter(payslip=pk).values('amount','name')
deductions = Deduction.objects.filter(payslip=pk).values('amount','name')
payslip['allowances'] = list(allowances)
payslip['deductions'] = list(deductions)
payslip['total_allowances'] = allowances.aggregate(net_allowance=Sum('amount'))['net_allowance']
payslip['total_deductions'] = deductions.aggregate(net_deduction=Sum('amount'))['net_deduction']
payslip['netpay'] = (payslip['total_allowances']+int(employee['basic']))-payslip['total_deductions']
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)
APIViewas in MD. Khairul Basar's answer, but it won't improve performance or make the view any more readable.