如何解决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
相关产品推荐
相关产品推荐

