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

DRF Assignment视图集POST请求报TypeError内部服务器错误排查

问题排查与解决方法

核心原因

报错出现在DRF处理异常的流程中,尝试将DeferredAttribute对象转为整数时失败。DeferredAttribute是Django模型字段的未求值状态,通常是代码中直接引用了模型类的字段对象(如Assignment.id),而非模型实例的实际字段值(如instance.id)。

排查步骤及修复方案

1. 检查自定义分页类CustomPagination

打开项目中的pagination.py,重点查看get_paginated_response方法:

  • 若存在直接引用模型字段的代码(如Assignment.id),这会返回字段对象而非实际值,触发错误。
  • 修复示例:
    # 错误示例
    class CustomPagination(PageNumberPagination):
        def get_paginated_response(self, data):
            return Response({
                'count': self.page.paginator.count,
                'next': self.get_next_link(),
                'previous': self.get_previous_link(),
                'results': data,
                'invalid_field': Assignment.id  # 直接引用模型字段对象
            })
    
    # 修复后(删除错误字段或改为基于实例的正确值)
    class CustomPagination(PageNumberPagination):
        def get_paginated_response(self, data):
            return Response({
                'count': self.page.paginator.count,
                'next': self.get_next_link(),
                'previous': self.get_previous_link(),
                'results': data
            })
    

2. 检查AssignmentSerializer实现

打开assignment/serializers.py,检查序列化器定义:

  • 避免在字段source参数中直接引用模型类的字段(如source=Assignment.id),应使用字段名称字符串(如source='id')。
  • 若有自定义字段,确保to_representation方法返回实际值而非字段对象。
  • 修复示例:
    # 错误示例
    class AssignmentSerializer(serializers.ModelSerializer):
        invalid_field = serializers.CharField(source=Assignment.id)
    
        class Meta:
            model = Assignment
            fields = ['id', 'name', 'invalid_field']
    
    # 修复后(删除错误字段或修正source)
    class AssignmentSerializer(serializers.ModelSerializer):
        class Meta:
            model = Assignment
            fields = ['id', 'name', 'last_updated_by']  # 仅保留实例字段
    

3. 验证修复

修改完成后重新发起POST请求,确认错误消失,API正常返回创建的作业数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:30:12