You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django DRF视图修改Task模型属性代码无法运行问题求助

问题修复方案

现有代码的错误点

  • 对象获取逻辑错误:Task.objects.get(id=task_id)在查询不到对象时会直接抛出DoesNotExist异常,不会返回空值,所以if not obj的判断永远不会触发
  • 状态判断逻辑倒置:现有代码判断任务状态为PENDING时返回“任务非待处理”提示,和预期逻辑完全相反
  • 模型方法调用错误:assign_to_benefactor仅需要接收一个受益方对象作为参数,现有代码传入了视图实例和原有分配的受益方两个错误参数
  • 多余的save调用:assign_to_benefactor方法内部已经执行了self.save(),视图层再次调用属于冗余操作
  • 请求方法不合理:修改数据的操作用GET不符合RESTful规范,容易造成重复提交问题,建议改为POST

修复后的代码

视图层代码

from django.shortcuts import get_object_or_404

class TaskRequest(APIView):
    permission_classes = [IsBenefactor,]
    # 修改为POST请求更符合接口规范
    def post(self, request, task_id):
        # 用快捷方法统一处理对象不存在时的404返回逻辑
        obj = get_object_or_404(Task, id=task_id)
        # 修正判断逻辑:非PENDING状态才返回错误提示
        if obj.state != obj.TaskStatus.PENDING:
            data={
                'detail': 'This task is not pending.'
            }
            return Response(data , status=status.HTTP_404_NOT_FOUND)
        else:
            # 传入当前请求的受益方用户即可,如果Benefactor和User是一对一关联,替换为request.user.benefactor
            obj.assign_to_benefactor(request.user)
            data={
                'detail': 'Request sent.'
            }
            return Response(data , status=status.HTTP_200_OK)

内容的提问来源于stack exchange,提问作者abolfazlmalekahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:24:01