diff --git a/finance/views.py b/finance/views.py index 62c3725..6287c55 100644 --- a/finance/views.py +++ b/finance/views.py @@ -2163,35 +2163,70 @@ class PaymentRequest(APIView): class PaymentDisplay(APIView): def post(self, request, *args, **kwargs): """ - 付款申请列表展示 - 只显示:申请人、收款单位、付款金额、支付说明 + 付款申请列表展示接口 + 必填参数:page(页码)、per_page(每页数量) + 可选参数:times(开始时间)、end_time(结束时间)、payee_name(收款方名称搜索)、applicant(申请人搜索) + 返回:申请人、收款单位、付款金额、支付说明 """ + # 必填参数:页数和每页数量 page = request.data.get('page') per_page = request.data.get('per_page') - times = request.data.get('times') - end_time = request.data.get('end_time') - payee_name = request.data.get('payee_name') # 收款方名称搜索 - applicant = request.data.get('applicant') # 申请人搜索 - if not all([page, per_page]): - return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST) + # 可选参数:搜索条件 + times = request.data.get('times') # 开始时间(可选) + end_time = request.data.get('end_time') # 结束时间(可选) + payee_name = request.data.get('payee_name') # 收款方名称搜索(可选) + applicant = request.data.get('applicant') # 申请人搜索(可选) + # 验证必填参数 + if not page: + return Response({ + 'status': 'error', + 'message': '缺少必填参数: page(页码)', + 'code': 1 + }, status=status.HTTP_400_BAD_REQUEST) + + if not per_page: + return Response({ + 'status': 'error', + 'message': '缺少必填参数: per_page(每页数量)', + 'code': 1 + }, status=status.HTTP_400_BAD_REQUEST) + + # 转换为整数 + try: + page = int(page) + per_page = int(per_page) + except (ValueError, TypeError): + return Response({ + 'status': 'error', + 'message': '参数类型错误: page和per_page必须是数字', + 'code': 1 + }, status=status.HTTP_400_BAD_REQUEST) + + # 构建查询条件 Q_obj = Q(is_deleted=False) + + # 时间范围筛选(可选) if times and end_time: Q_obj &= Q(submit_tiem__gte=times) & Q(submit_tiem__lte=end_time) + + # 收款方名称搜索(可选,兼容新旧字段) if payee_name: - # 兼容旧字段 Q_obj &= Q(payee__icontains=payee_name) + + # 申请人搜索(可选) if applicant: Q_obj &= Q(applicant__icontains=applicant) - # 只查询存在的字段,避免访问不存在的字段 - # 使用only()只查询确定存在的字段 + # 查询数据(只查询存在的字段,避免访问不存在的字段) pay = Payment.objects.filter(Q_obj).only( 'id', 'applicant', 'amount', 'state', 'submit_tiem', 'payee' ).order_by('-id') + total = pay.count() + # 分页处理 paginator = Paginator(pay, per_page) try: user_agents_page = paginator.page(page) @@ -2200,10 +2235,10 @@ class PaymentDisplay(APIView): except EmptyPage: user_agents_page = paginator.page(paginator.num_pages) + # 构建返回数据 data = [] for info in user_agents_page.object_list: # 安全地获取字段值,兼容新旧字段 - # 使用getattr()安全访问可能不存在的字段 payee_name_value = getattr(info, 'payee_name', None) or getattr(info, 'payee', None) or '' payment_description_value = getattr(info, 'payment_description', None) or '' @@ -2217,7 +2252,13 @@ class PaymentDisplay(APIView): "submit_tiem": info.submit_tiem, # 提交时间 } data.append(itme) - return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK) + + return Response({ + 'message': '展示成功', + "total": total, + 'data': data, + 'code': 0 + }, status=status.HTTP_200_OK) class EditPayment(APIView):