Django中查询同一模型时如何返回不同自定义错误信息?
如何针对同一Model的不同ID返回自定义错误信息?
你遇到的问题确实很常见——因为两个查询都针对同一个Model,放在同一个try块里的话,没法区分到底是哪个ID不存在。其实只要把查询逻辑拆分一下,就能精准返回对应的错误信息,这里有两种简单可行的方案:
方案一:拆分查询,逐个捕获异常
把两个get查询分开,各自用独立的try-except块包裹,这样哪个ID查不到,就能直接返回对应的提示:
def mutate(self, info, first_id, second_id): # 单独查询第一个对象并处理异常 try: first = Model.objects.get(pk=first_id) except Model.DoesNotExist: return Exception(f'{first_id}不存在') # 单独查询第二个对象并处理异常 try: second = Model.objects.get(pk=second_id) except Model.DoesNotExist: return Exception(f'{second_id}不存在') # 两个对象都存在时执行后续逻辑 ...
这种方式逻辑最直观,代码也容易维护,适合只有两个查询的场景。
方案二:封装工具函数,减少重复代码
如果你的代码里有很多类似的查询需求,可以封装一个小工具函数,把模型、ID和自定义错误信息传进去,这样能避免重复写try-except:
def get_model_or_custom_error(model, pk, error_message): try: return model.objects.get(pk=pk) except model.DoesNotExist: raise Exception(error_message) def mutate(self, info, first_id, second_id): try: first = get_model_or_custom_error(Model, first_id, f'{first_id}不存在') second = get_model_or_custom_error(Model, second_id, f'{second_id}不存在') except Exception as e: return e # 后续逻辑 ...
这个方法能让代码更简洁,尤其当你需要处理更多同类型查询的时候,复用性更强。
本质上这两种方案都是围绕拆分异常捕获范围来解决问题的,只要让每个查询的异常能被单独识别,就能返回精准的自定义错误啦。
内容的提问来源于stack exchange,提问作者Caspian
相关产品推荐
相关产品推荐

