我的项目中有一个模式,在该模式中,我需要重复使用过滤逻辑来返回多个结果和单个结果(取决于输入和调用者的需求)。我想制作一些通用函数,将QuerySet作为其输入,并返回其中的唯一项,或者如果结果数不为1,则引发Model.objects.get()
这样的异常。
def single_result_from_qset(qset: "QuerySet") -> Any: """TODO: make this work somehow""" if len(qset) > 1: raise qset.MultipleObjectsReturned try: return qset[0] except IndexError: # this is not unreachable, no matter what PyCharm tells you raise qset.DoesNotExist
我尝试使用上述代码遇到的问题在我需要提出错误时出现。我没有提出错误,而是得到了
AttributeError
,因为MultipleObjectsReturned
和DoesNotExist
都不是QuerySet
的属性。如何从QuerySet所作用的对象上引发这些错误?
作为一个额外的问题,函数定义的正确类型签名是什么?
我的项目中有一个模式,在该模式中,我需要重新使用过滤逻辑来返回多个结果和单个结果(取决于调用者的输入和需求)。我想做一些...
更好的解决方案是使用.get()
from QuerySet
而不是实现新的辅助函数。 .get()
返回并完全抛出我要求上述帮助函数执行的操作。