繁体   English   中英

如何在Django中将基于函数的视图转换为基于类的视图

[英]How to convert a Function based view into a Class based View in django

我对基于函数的视图与基于类的视图进行了一些研究,发现基于类的视图非常有效。 我有以下代码片段,并希望将基于函数的视图转换为基于类的视图。 如何正确实施?

@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) 

您应该在此处遵循有关基于类的视图的官方文档。

from rest_framework.views import APIView

class GetPayslipDetail(APIView):
    def get(request, pk, format=None, *args, **kwargs):
        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)

在您的urls.py中更改为

from .views import GetPayslipDetail

urlpatterns = [
    path('some-path/', GetPayslipDetail.as_view(), name='some_path'),
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM