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

如何解决Django API框架中访问serializer.errors前需调用.is_valid()的报错

错误原因

该报错由Python的and逻辑短路规则导致:当deviceserializer.is_valid()校验失败返回False时,程序不会执行后续的devdserializer.is_valid(),此时devdserializer从未完成校验流程,直接访问.errors属性就会触发断言错误。

修复代码(views.py)

调整逻辑先分别调用两个序列化器的校验方法,再统一判断校验结果,即可保证无论校验是否通过,两个序列化器都已完成校验,可正常读取错误信息:

@api_view(['POST'])
def create_device(request):
    deviceserializer = DeviceSerializers(data=request.data)
    devdserializer = DeviceDetailSerializers(data=request.data)
    # 预先分别执行两个序列化器的校验,避免逻辑短路
    is_device_valid = deviceserializer.is_valid()
    is_detail_valid = devdserializer.is_valid()
    
    if is_device_valid and is_detail_valid:   
        device_instance = deviceserializer.save()
        devdserializer.save(DD2DKEY=device_instance)                
        results = {
            "device": deviceserializer.data,
            "device_details": devdserializer.data,
        }
        return Response(results, status=status.HTTP_201_CREATED)
    else:
        errors = {
            "device": deviceserializer.errors,
            "device_details": devdserializer.errors,
        }
        return Response(errors, status=status.HTTP_400_BAD_REQUEST)

内容的提问来源于stack exchange,提问作者L.Calvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:39:03