什么';当引发与IntegrityError相关的异常时,获取字段名称的最python方式是什么?

什么';当引发与IntegrityError相关的异常时,获取字段名称的最python方式是什么?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在用DRF开发一个API,我想在引发与DRF相关的异常时生成并返回正确的自定义错误消息 为此,我实现了一个自定义异常处理程序。在自定义异常处理程序中,我希望从实例中获取导致错误的字段的名称,然后在响应中生成并返回正确的消息 目前,我可以通过解析异常实例的消息属性来实现这一点,但我不确定这是否是最好的解决方案 那么,当抛出与IntegrityError相关的异常时,是否有任何python方法可以从异常实例获取字段的名称 谢谢 根据它,IntergityError似乎只不过是一个异常,所以唯一的

我正在用DRF开发一个API,我想在引发与DRF相关的异常时生成并返回正确的自定义错误消息

为此,我实现了一个自定义异常处理程序。在自定义异常处理程序中,我希望从实例中获取导致错误的字段的名称,然后在响应中生成并返回正确的消息

目前,我可以通过解析异常实例的消息属性来实现这一点,但我不确定这是否是最好的解决方案

那么,当抛出与IntegrityError相关的异常时,是否有任何python方法可以从异常实例获取字段的名称

谢谢

根据它,IntergityError似乎只不过是一个异常,所以唯一的方法是解析
Exception.message
Exception.args

你总是可以检查什么给你提供了打印(dir(exception)),但是我很确定只有
消息和
args
会有帮助。

IMHO“解析消息”是完美的pythonic:简单易读,你可以在任何其他类似情况下使用相同/类似的解决方案。我以前见过类似的情况:

在自定义序列化程序的create()方法中 尝试: return super().create(已验证的_数据) 除完整性错误外,如e: 引发异常(详细信息=e.args[0]。拆分('detail:')[1])

它简单、有效,并且以任何其他方式获取额外数据可能会涉及到更复杂的事情。

不确定为什么首先会得到IntegrityErrors。DRF应该在序列化程序中验证您的数据,包括任何唯一性约束。没有自定义异常处理程序,您完全正确。但我需要自定义和本地化错误消息,并分别处理不同的错误类型。(项目限制)@DanielRoseman